关于使用 ACE_Proactor 做的服务器端与客户端交互的问题
客户端与服务器端建立连接,然后客户端发送消息给服务器端,但当长时间客户端没有发消息时,服务器端根据设置的超时会把连接给断掉,如下:
if (this->handle() != ACE_INVALID_HANDLE)
{
ACE_Proactor::instance()->cancel_timer(*this,1);
//放这里好吗?
m_reader->cancel();
m_writer->cancel();
//显示客户端连接地址和端口
//DisplayInfo(this->handle(), " disconnected.");
ACE_OS::shutdown(this->handle(),SD_BOTH);
ACE_OS::closesocket( this->handle() );
this->handle(ACE_INVALID_HANDLE);
}
而对应的此处理器并没有释放掉,而是返回给了上级等待有其他连接时再次使用。
在现在这种断开的情况下,客户端再次向服务器端发送消息,居然能发送,而且在 handle_write_stream 中的 result.success() 居然也成功了,不明白为什么???
当再发送第二条消息时,就能识别出来已经断开了。 还有请指点一下
我到底怎么做才能确保我发送的内容对方接收到了?
才能保证发送内容的正确性呢?
谢谢~~ 先用工具查一下连接是否还存在,
另楼主确认关闭的代码执行到了么?
回复 #3 modern 的帖子
跟了一下,上面写的那段 关闭代码 确实是执行到了的~~~有可能说关闭了一边,而连接还存在的情况出现吗?
谢谢~~ 我的意思是用工具检查一下,
在楼主确认调用了关闭函数之后,
TCP连接的状态。
页:
[1]