找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3687|回复: 3

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

[复制链接]
发表于 2007-12-21 22:01:15 | 显示全部楼层 |阅读模式
在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 ());后不响应.
晕,做过的人给点经验值.
 楼主| 发表于 2007-12-21 22:01:20 | 显示全部楼层
在调用 ACE_OS::closesocket()之前加上 ACE_OS::shutdown()试试
 楼主| 发表于 2007-12-21 22:01:27 | 显示全部楼层
是的。客户端ACE_OS::closesocket,不代表对方立刻收到通知 - 这是不可能的事情。网络状态的维护本身就是很麻烦的事情。
 楼主| 发表于 2007-12-21 22:01:32 | 显示全部楼层
客户端关闭连接,试试用

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

不过需要注意,在关闭前需要确认已经发送了所有的待发数据,即 handle_write_stream 需要判断发送是否已经完成。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-20 04:08 , Processed in 0.040474 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表