peakzhang 发表于 2007-12-21 22:01:15

Proactor中不能响应客户连接关闭,为什么.

在proactor中例子handle_read_stream中的处理是这样的:
ACE_Message_Block &mb = result.message_block ();
if (!result.success () || result.bytes_transferred () == 0) {
m_CanWrite = 0;
ACE_DEBUG((LM_INFO, ACE_TEXT("%ITime[%D]>>>>>>>>>>>连接服务关闭.\n")));
mb.release ();
delete this;
}说明read不成功或是客户端关闭连接响会做如下处理.但在我写的例子可以响应读写和完成回调都没有问题,但是以上代码在客户端明确的调用了   ACE_OS::closesocket (this->handle ());后不响应.
晕,做过的人给点经验值.

peakzhang 发表于 2007-12-21 22:01:20

在调用 ACE_OS::closesocket()之前加上 ACE_OS::shutdown()试试

peakzhang 发表于 2007-12-21 22:01:27

是的。客户端ACE_OS::closesocket,不代表对方立刻收到通知 - 这是不可能的事情。网络状态的维护本身就是很麻烦的事情。

peakzhang 发表于 2007-12-21 22:01:32

客户端关闭连接,试试用

ACE_OS::shutdown(this->handle(), ACE_SHUTDOWN_WRITE);

不过需要注意,在关闭前需要确认已经发送了所有的待发数据,即 handle_write_stream 需要判断发送是否已经完成。
页: [1]
查看完整版本: Proactor中不能响应客户连接关闭,为什么.