ASIO-检测死连接

ASIO - Detect dead connection

本文关键字:连接 检测 ASIO-      更新时间:2023-10-16

我正在尝试使用boost asio库在C 中创建一个异步服务器,它按照其网页,ioservice和worker(session)提供的标准模型进行。我正在使用这样的东西:

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

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

但是,当用户通过Force与Internet断开连接时,问题出现了,插座仍处于"已建立"状态,尽管用户已经消失了,是的,当OS处理发送TCP关闭数据包时,Internet不再可用?

也出现了电话网络网络,用户旅行,从HSDPA到没有互联网的交换区域以及GPRS的交换区域所带来的问题。

如何检测到这样的死连接?

  • 当客户端应用程序关闭插座时,您的阅读处理程序将立即称为
  • 客户端应用程序崩溃但客户端OS仍在网上
  • 当客户端计算机电缆被插入时,根本没有通知。您可以在应用程序层实现保留机制,也可以使用TCP内置的保持距离。我建议自己做更多的控制权(例如,重新连接会话)。在校长中,您要执行async_write,这会导致您的写处理程序被错误调用。