gpt4 book ai didi

c++ - ASIO - 检测死连接

转载 作者:行者123 更新时间:2023-11-28 06:17:21 25 4
gpt4 key购买 nike

我正在尝试使用 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 socket 仍然是“已建立”,尽管用户已经不使用它。

如何检测这样的死连接?

最佳答案

  • 当客户端应用程序关闭套接字时,您的读取处理程序将立即被调用
  • 当客户端应用程序崩溃但客户端操作系统仍然在线时,您的读取处理程序将在客户端操作系统超时(一分钟左右)后被调用
  • 拔下客户端计算机电缆时,根本没有任何通知。可以在应用层实现保活机制,也可以使用TCP自带的保活机制。我建议你自己做,因为你有更多的控制权(例如重新连接 session )。原则上,您执行一个 async_write,这将导致您的写入处理程序被调用并出现错误。

关于c++ - ASIO - 检测死连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com