我有一个使用asio的异步TCP/IP客户端。当连接丢失时,async_read的句柄函数会收到错误。所以我得知连接丢失了。boost asio:如何监控tcp连接是否有效
现在,我重构了一些遗留代码,实现了一个同步TCP/IP客户端,其中抽象接口强制执行此序列:同步写入,然后是同步读取。 用asio做这件事很简单,但我想知道异步如果连接丢失。
有没有更优雅的方式比:
选项A: 添加,检查线程如果套接字仍然活着(通过尝试读取...但我怎么能肯定的是,读不从我的同步读窃取数据见Boost asio ip tcp iostream Error Detection)
选项B: 使用async_read代替和,并模拟同步阅读
我认为答案是否定的。但也许有一些特定于平台的解决方案。 – mirk 2012-04-05 13:49:12
我不认为TCP协议可以检测到连接失败,除非它在特定的时间范围内未收到对发送的数据包的确认。 – Ferruccio 2012-04-05 23:18:01
我已经实现了选项B.但是,有两件事我不明白1.断开连接未被检测到2.如果我拔掉了服务器(即打印机)的以太网电缆,我仍然可以发送数据并且它不返回错误。只有第二次,它会抛出一个错误 – DoogQc 2012-04-06 20:08:56