|
|
客户端与服务器端建立连接,然后客户端发送消息给服务器端,但当长时间客户端没有发消息时,服务器端根据设置的超时会把连接给断掉,
如下:
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() 居然也成功了,不明白为什么???
当再发送第二条消息时,就能识别出来已经断开了。 |
|