确定套接字中的可用字节数

时间:2017-01-10 18:54:53

标签: c++ sockets ubuntu boost boost-asio

我有boost::asio::ip::tcp::socket并想确定套接字是否包含可供读取的数据。我读到了available(),但是如果有可用数据,该函数有时也会返回0(如果可以不阻塞地读取它)。可执行文件在Ubuntu上运行 - 也许系统调用可以帮助吗?

1 个答案:

答案 0 :(得分:2)

由于您只需要知道套接字是否包含可读数据,因此只需从套接字发出常规非阻塞read即可。如果有数据,您无论如何都需要阅读它,所以只需尝试阅读。

如果您试图避免花费read,如果没有什么可读的,请意识到您只是添加了额外的操作。检查是否有要读取的数据并不比尝试读取要便宜得多。

当然,只有待处理的async_read会更好。这让Boost的反应堆能够完成它的工作。