在boost文档中,它指出如果有错误则返回值为0,如果为真,那么在从套接字读取0字节的情况下它将返回什么?
答案 0 :(得分:2)
如果没有可读取的字节,则basic_stream_socket::available()
将返回0
,因为0
是可以无阻塞地读取的字节数。该文档并不意味着只有在发生错误时才会返回0
:
可以不阻塞地读取的字节数,如果发生错误则为0。
简要介绍implementation,可以看出Boost.Asio使用ioctlsocket()
或ioctl()
来确定可用的字节数。这些系统调用都没有记录为无法成功返回0
。
答案 1 :(得分:1)
通常,如果不实际尝试读取,则无法检测连接失败。
这是网络流所固有的。
相关(虽然谈论Java):
Boost Asio Docs关于短读/短写和流尾错误的这一部分也很有启发性: