boost asio:如何监视tcp连接是否存活

时间:2012-04-05 12:09:05

标签: c++ boost boost-asio

我有一个使用asio的异步TCP / IP客户端。当连接丢失时,我的async_read句柄函数会收到错误。所以我被告知连接丢失了。

现在,我正在重构一些实现同步TCP / IP客户端的遗留代码,其中抽象接口强制执行此序列:同步写入,然后是同步读取。 使用asio执行此操作相当容易,但我想异步知道连接是否丢失。

是否有比以下更优雅的方式:

选项A: 添加一个线程来检查套接字是否仍然存活(通过尝试读取...但是如何确保读取不会从同步读取中窃取数据?请参阅Boost asio ip tcp iostream Error Detection

选项B: 请改用async_read并模拟同步读取

1 个答案:

答案 0 :(得分:2)

我认为同步操作会像异步操作一样失败。但是当同步一个失败时,它可能会更具破坏性,因为当其他所有东西都要等待时,超时可能会很长并且更加明显。

您可能希望研究在套接字上启用TCP保持活动,并可能降低TCP保持活动间隔,以便更快地检测丢失的连接。