我有一个 boost::asio::ip::tcp::socket
并想确定套接字是否包含可读取的数据。我阅读了有关 available()
的内容,但是如果有可用数据(以防可以无阻塞读取),该函数有时也会返回 0
。可执行文件正在 Ubuntu 上运行 - 也许系统调用会有帮助?
最佳答案
由于您只需要知道套接字是否包含可读数据,只需从套接字发出常规的非阻塞 read
即可。如果有数据,您无论如何都需要读取它,所以只需尝试读取即可。
如果您试图避免在没有任何内容可读的情况下进行read
的开销,请意识到您只是在添加一个额外的操作。检查是否有数据要读取并不比尝试读取便宜很多。
当然,只有挂起的 async_read
更好。这让 Boost 的 react 堆可以完成它的工作。
关于c++ - 确定套接字中的可用字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41576283/