我目前正在带宽非常低的环境中测试我的网络应用程序。我目前有代码试图通过确保我仍在接收信息来确保连接良好。
传统上,我通过在我的 ReadHandler 函数中记录时间戳来完成此操作,这样每次它被调用时我都知道我已经在套接字上接收到数据。对于非常低的带宽,这还不够,因为我的 ReadHandler 没有被足够频繁地调用。
我一直在考虑编写自己的完成条件函数(现在我正在使用 tranfer_at_least(1)),认为它会被更频繁地调用,我可以在那里记录我的时间戳,但我想知道是否有' 其他一些更标准的方法来解决这个问题。
最佳答案
我们在生产中遇到了类似的问题:我们的一些连接可能会闲置几天,但我们必须尽快检测远程是否挂掉。
我们通过启用 TCP_KEEPALIVE 选项解决了这个问题:
boost::asio::socket_base::keep_alive option(true);
mSocketTCP.set_option(option);
它必须伴随着新的启动脚本,该脚本将合理的值写入 /proc/sys/net/ipv4/tcp_keepalive_*
,默认情况下超时时间很长(在 LInux 上)
关于c++ - 确保使用 async_read 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7354022/