c++ - boost asio : How to monitor that a tcp connection is alive

标签 c++ boost boost-asio

我有一个使用 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/

相关文章:

c++ - C++ 中是否有最大数组长度限制?

c++ - 如何遍历 CListCtrl 的元素?

c++ - boost::asio::deadline_timer 绑定(bind)到多态套接字类指针

c++ - 再次调用 async_read 会抛出异常

c++ - Boost::Asio 异步写入失败

c++ - image.convertTo 并不总是有效

c++ - AVR-Studio 中的 vector 头文件

opengl - 将 Boost uBLAS 矩阵传递给 OpenGL 着色器

C/C++高频消息程序

ubuntu - 如何在 Ubuntu 10.04 上安装 boost 1.40?