提升 ASIO 服务器 - 检测空闲连接

Boost ASIO server - detecting idle connection

本文关键字:连接 检测 ASIO 服务器 提升      更新时间:2023-10-16

这篇文章的目的是弄清楚如何在基于Boost ASIO的HTTP服务器上实现Keep-Alive超时。

这有两个部分 -

  1. 当客户端关闭连接时
  2. 当客户端连接处于非活动状态时

我相信,可以通过在本机套接字手柄上设置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的操作