增强ASIO服务器 - 检测空闲连接

时间:2017-07-10 10:52:18

标签: c++ boost tcp boost-asio

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

这有两个部分 -

  1. 客户端关闭连接时
  2. 当客户端连接处于非活动状态时
  3. 我相信,1)可以通过在本机套接字句柄上设置TCP_KEEPIDLE,TCP_KEEPCNT和TCP_KEEPINTVL选项来检测。

    检测上述2)的最佳方法是什么?

    我已尝试在本机套接字上设置SO_RCVTIMEO和SO_SNDTIMEO,但服务器似乎在配置的超时间隔结束时关闭连接。

    非常感谢任何指针。

    谢谢!

1 个答案:

答案 0 :(得分:3)

您想要检测客户端在X时间内没有向您发送任何内容的情况。您可以使用Asio中的计时器执行此操作:How do I make the boost/asio library repeat a timer?

每个客户端构造一个计时器对象,或构造一个全局计时器,并在每次计时器触发时检查所有客户端的最后一条消息接收时间。

SO_RCVTIMEO对您没有帮助,因为当它过期时,接收调用会返回EAGAIN或类似内容,而Asio可能不会对此做任何事情。在此处阅读:SO_RCVTIME and SO_RCVTIMEO not affecting Boost.Asio operations

相关问题