【问题标题】:Boost ASIO server - detecting idle connectionBoost ASIO 服务器 - 检测空闲连接
【发布时间】:2017-12-14 01:49:53
【问题描述】:

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

这有两个部分 -

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

我相信,1) 可以通过在本机套接字句柄上设置 TCP_KEEPIDLE、TCP_KEEPCNT 和 TCP_KEEPINTVL 选项来检测。

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

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

任何指针都非常感谢。

谢谢!

【问题讨论】:

  • 如果客户端很好地关闭了它的连接,那么你的连接结束将被标记为可读(如果你使用轮询)然后readrecv将返回0。跨度>

标签: c++ boost tcp boost-asio


【解决方案1】:

您想检测客户在 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

【讨论】:

    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多