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 ());后不响应.
晕,做过的人给点经验值. 在调用 ACE_OS::closesocket()之前加上 ACE_OS::shutdown()试试 是的。客户端ACE_OS::closesocket,不代表对方立刻收到通知 - 这是不可能的事情。网络状态的维护本身就是很麻烦的事情。 客户端关闭连接,试试用
ACE_OS::shutdown(this->handle(), ACE_SHUTDOWN_WRITE);
不过需要注意,在关闭前需要确认已经发送了所有的待发数据,即 handle_write_stream 需要判断发送是否已经完成。
页:
[1]