我有boost::asio::ip::tcp::socket
并想确定套接字是否包含可供读取的数据。我读到了available()
,但是如果有可用数据,该函数有时也会返回0
(如果可以不阻塞地读取它)。可执行文件在Ubuntu上运行 - 也许系统调用可以帮助吗?
答案 0 :(得分:2)
由于您只需要知道套接字是否包含可读数据,因此只需从套接字发出常规非阻塞read
即可。如果有数据,您无论如何都需要阅读它,所以只需尝试阅读。
如果您试图避免花费read
,如果没有什么可读的,请意识到您只是添加了额外的操作。检查是否有要读取的数据并不比尝试读取要便宜得多。
当然,只有待处理的async_read
会更好。这让Boost的反应堆能够完成它的工作。