【发布时间】:2015-05-04 17:46:51
【问题描述】:
我正在尝试使用 Boost ASIO 库在 C++ 中创建一个异步服务器,它遵循他们的网页、ioservice 和 worker(会话)提供的标准模型 我正在使用这样的东西:
asio::async_read(socket,buffer(data,datalen),[=]( error , len ){
if(error || len==0) disconnect(); else processRequest(data,len);
})
首先,它工作得很好,当用户打开和关闭连接时 - 操作系统会完成这项工作。
但是当用户强行断开与互联网的连接时,问题就出现了,尽管用户已经离开,但套接字仍处于“ESTABLISHED”状态,是的,当互联网不再可用时,操作系统将如何处理发送 TCP 关闭数据包?
电话互联网网络也有问题,用户旅行,将区域从 HSDPA 切换到无互联网,最后是 GPRS,旧的 HSDPA 套接字仍然“已建立”,尽管用户已经不使用它。
如何检测这样的死连接?
【问题讨论】:
-
TCP/IP协议定义了一个keep-alive机制,可以检测传输层的丢失。 See here也请。
标签: c++ networking tcp boost-asio