本文的目的是弄清楚如何在基于Boost ASIO的HTTP服务器上实现Keep-Alive超时。
这有两个部分 -
我相信,1)可以通过在本机套接字句柄上设置TCP_KEEPIDLE,TCP_KEEPCNT和TCP_KEEPINTVL选项来检测。
检测上述2)的最佳方法是什么?
我已尝试在本机套接字上设置SO_RCVTIMEO和SO_SNDTIMEO,但服务器似乎在配置的超时间隔结束时关闭连接。
非常感谢任何指针。
谢谢!
答案 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