当有0个字节可用时,boost :: asio :: ip :: tcp :: available()会返回什么

时间:2014-07-18 08:10:26

标签: sockets boost-asio

在boost文档中,它指出如果有错误则返回值为0,如果为真,那么在从套接字读取0字节的情况下它将返回什么?

2 个答案:

答案 0 :(得分:2)

如果没有可读取的字节,则basic_stream_socket::available()将返回0,因为0是可以无阻塞地读取的字节数。该文档并不意味着只有在发生错误时才会返回0

  

可以不阻塞地读取的字节数,如果发生错误则为0。

简要介绍implementation,可以看出Boost.Asio使用ioctlsocket()ioctl()来确定可用的字节数。这些系统调用都没有记录为无法成功返回0

答案 1 :(得分:1)

通常,如果不实际尝试读取,则无法检测连接失败。

这是网络流所固有的。

相关(虽然谈论Java):

Boost Asio Docs关于短读/短写和流尾错误的这一部分也很有启发性: