2

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

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

有没有比以下更优雅的方法:

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

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

4

1 回答 1

2

我想同步操作会像异步操作一样失败。但是,当同步失败时,它可能会更具破坏性,因为当其他一切都必须等待它时,超时可能会非常长并且更加明显。

您可能想考虑在您的套接字上启用 TCP keep-alives,并可能降低 TCP keep-alive 间隔,以便更快地检测到丢失的连接。

于 2012-04-05T22:40:13.773 回答