我有一个使用 asio 的异步 TCP/IP 客户端。当连接丢失时,我的 async_read 处理函数收到错误。因此我被告知连接已丢失。
现在,我正在重构一些实现同步 TCP/IP 客户端的遗留代码,其中抽象接口(interface)强制执行以下顺序:同步写入,然后同步读取。 使用 asio 做到这一点相当容易,但我想异步知道连接是否丢失。
有没有比以下更优雅的方式:
选项A: 添加一个线程来检查套接字是否仍处于事件状态(通过尝试读取...但我如何确定读取不会从我的同步读取中窃取数据?请参阅 Boost asio ip tcp iostream Error Detection )
选项B: 使用 async_read 代替并模拟同步读取
最佳答案
我想同步操作会像异步操作一样失败。不过,当同步失败时,它可能会更具破坏性,因为超时可能会很长,并且当其他所有事情都必须等待时,超时会更加明显。
您可能需要考虑在套接字上启用 TCP 保持事件,并可能降低 TCP 保持事件间隔,以便更快地检测丢失的连接。
关于c++ - boost asio : How to monitor that a tcp connection is alive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10028307/