c++ - 确定套接字中的可用字节数

标签 c++ sockets ubuntu boost boost-asio

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

最佳答案

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

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

当然,只有挂起的 async_read 更好。这让 Boost 的 react 堆可以完成它的工作。

关于c++ - 确定套接字中的可用字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41576283/

相关文章:

Docker 设置,无法克隆存储库,因为容器名称已被占用

Python+ubuntu错误

python - 为什么在 Tensorflow/keras 作业下只有一对 GPU 的 GPU 利用率不为零?

C++ ifstream 到 char *

c - 如何在没有父退出的情况下进行守护进程?

java - Java 客户端<-->服务器套接字的问题

java - 从另一个 JFrame 执行 JFrame

c++ - 如何查询一个框是否在rtree中

c++ - 线程安全持有人

c++ - HashMap 直接访问运算符 []