提升 ASIO 服务器 - 检测空闲连接
Boost ASIO server - detecting idle connection
这篇文章的目的是弄清楚如何在基于Boost ASIO的HTTP服务器上实现Keep-Alive超时。
这有两个部分 -
- 当客户端关闭连接时
- 当客户端连接处于非活动状态时
我相信,可以通过在本机套接字手柄上设置TCP_KEEPIDLE、TCP_KEEPCNT和TCP_KEEPINTVL选项来检测上述 1( 以上。
检测上述 2( 的最佳方法是什么?
我尝试在本机套接字上设置SO_RCVTIMEO和SO_SNDTIMEO,但服务器似乎没有在配置的超时间隔结束时关闭连接。
任何指示都非常感谢。
谢谢!
您希望检测客户端在 X 时间内未向您发送任何内容的情况。 您可以使用 Asio 中的计时器来执行此操作:如何使 boost/asio 库重复计时器?
为每个客户端构造一个计时器对象,或者构造一个全局计时器,并在每次计时器触发时检查所有客户端接收的最后一个消息时间。
SO_RCVTIMEO
不会帮助你,因为当它过期时,接收呼叫会返回EAGAIN
或类似内容,Asio 可能不会对此做任何事情。 在此处阅读:SO_RCVTIME和SO_RCVTIMEO不影响Boost.Asio的操作
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 检测grpc服务器中关闭的客户端连接
- 提升 ASIO 服务器 - 检测空闲连接
- 如何在 Grpc 中使用双向流时检测(物理)断开连接
- 如何在 boost asio 中检测套接字上的关闭连接,而无需阻塞调用
- 在写入过程中立即使用boost::asio检测关闭的TCP连接
- Poco::Net HTTPServer:如何检测断开连接的客户端?
- 如何在非网关接口 Linux 上检测互联网连接
- 如果另一侧失去了他的净连接,我该如何从客户端/服务器端检测
- 如何在我的程序中检测GPS设备连接到的端口(C / C)
- 使用QNetworkAccessManager检测网络摄像机连接
- 如何检测用户何时与网络断开连接
- ASIO-检测死连接
- 如何在 Thrift 中检测服务器断开连接
- 如何检测程序运行时 Kinect 何时断开连接/拔出
- 如何检测ssh连接(通过QProcess)何时完成
- Arduino 以太网扩展板无法检测到断开连接
- 正在检测网络连接
- 如何在C++中检测我的局域网连接是否断开
- QtNetwork:为什么我检测不到传入的连接?(incomingConnection() 永远不会被触发)