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

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

有帮助吗?

解决方案

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

其他提示

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

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

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

我建议首发。

我认为一般来说,一旦你打开一个套接字,你应该立即开始阅读它,永远不要停止这样做。这样,您可以使服务器或客户端同时支持同步和异步协议。客户端关闭连接的那一刻,读取将告诉您的那一刻。

使用error_code可以检查客户端是否连接的条件。如果连接成功,则error_code error.value()将返回0,否则返回其他值。您还可以从error_code检查消息()。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top