ASIO - 检测死连接

时间:2015-05-03 08:54:47

标签: c++ networking tcp boost-asio

我正在尝试使用Boost ASIO库在C ++中创建异步服务器,它通过其网页,ioservice和worker(session)提供的标准模型 我正在使用这样的东西:

asio::async_read(socket,buffer(data,datalen),[=]( error , len ){
     if(error || len==0) disconnect(); else processRequest(data,len);
})

首先,当用户打开和关闭连接时,它可以正常工作 - 操作系统完成工作。

但是当用户通过强制断开互联网连接时,问题就出现了,套接字仍处于“已建立”状态,虽然用户已经离开,是的,当互联网不再可用时,操作系统如何处理发送TCP关闭数据包?

电话互联网,用户旅行,从HSDPA到无互联网的交换机区域以及最终GPRS,旧的HSDPA套接字仍然是“已建立”,但用户已经不使用它。

如何检测这样的死连接?

1 个答案:

答案 0 :(得分:1)

  • 当客户端应用程序关闭套接字时,将立即调用读取处理程序
  • 当客户端应用程序崩溃但客户端操作系统仍处于联机状态时,将在客户端操作系统超时(大约一分钟)后调用读取处理程序
  • 拔出客户端计算机电缆时,根本没有通知。您可以在应用程序层实现保持活动机制,也可以使用TCP内置的keep-alive。我建议您自己动手,因为您有更多控制权(例如重新连接会话)。原则上你执行async_write会导致你的写处理程序被调用并出错。