如何在Boost.Asio中检查套接字是否已关闭?

Hal*_*ali 6 c++ sockets boost boost-asio

检查套接字是否在连接的远程端关闭的最简单方法是什么?socket::is_open()即使它在远程端关闭(我正在使用boost::asio::ip::tcp::socket),它也会返回true .

我可以尝试从流中读取并查看它是否成功,但我必须更改程序的逻辑以使其以这种方式工作(我不希望在检查时从流中提取数据).

don*_*e26 10

只需检查处理程序中的boost::asio::error::eof错误async_receive.这意味着连接已关闭.这是唯一正确的方法.


tee*_*s99 7

是否有可用的增强功能?大多数套接字实现都有一种方法来读取数据而无需将其从队列中删除,因此您可以稍后再次读取它.这似乎满足您的要求.

在快速浏览asio文档之后,我无法找到我期待的确切内容,但这并不意味着它不在那里.

我建议对于初学者.


Nov*_*ova 6

如果同伴干净地关闭了连接,您应该在阅读时获得EOF.否则我通常ping,以确定连接是否真的活着.

  • ...我需要阅读才能获得 EOF。我想那就没有办法了。谢谢! (2认同)