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

Determine amount of available bytes in socket

我有一个 boost::asio::ip::tcp::socket 并想确定套接字是否包含可供读取的数据。我阅读了有关 available() 的信息,但是如果有可用数据(以防可以无阻塞读取),该函数有时也会 returns 0。可执行文件在 Ubuntu 上 运行 - 也许系统调用可以帮助?

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

如果您想在没有内容可读的情况下避免 read 的开销,请意识到您只是在添加一个额外的操作。检查是否有数据要读取并不比尝试读取便宜很多。

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