【发布时间】:2013-11-25 09:38:19
【问题描述】:
Linux 和 Windows 都支持 TCP keep-alive 数据包。它们可以通过(依赖于系统的)setsockopt 调用来激活和配置,参见例如this article 用于 Linux 案例。使用boost::asio 时,似乎支持保持活动消息,请参阅the current documentation。但是,该页面仅涵盖激活它。在对older post 的几个新回复中指出,Boost 最近添加了配置操作超时的方法(这消除了对不同系统的setsockopt 和#ifdef 代码分支的需要)。但是,recent response 仍然建议调用本机套接字。
我的问题是:如何使用boost::asio配置保持活动数据包的时间间隔和超时?
【问题讨论】:
-
@KillianDS 您引用的帖子涉及
SO_RCVTIMEO和SO_SNDTIMEO选项。当前的问题专门处理其他常量。如果您阅读参考文章,您会发现 Linux 系统上的原始选项是TCP_KEEPIDLE和TCP_KEEPINTVL。此外,接受的答案建议使用我明确试图避免的原始套接字。 -
不,它没有,它需要一个本机句柄,这与原始套接字不同。虽然它可能会谈论与您想要的不同的选项,但过程完全相同相同(您甚至在这里接受了一个非常相似的答案,使用相同的选项)。
标签: c++ tcp boost-asio