Linux 非阻塞套接字 : how much data can be read before blocking?

标签 linux sockets nonblocking

相对简单的问题:例如,使用 Linux 非阻塞套接字执行 recv() 时,有没有办法先验地确定可以接收多少数据?

似乎我总是要结束额外的 recv() 调用来确定我已经耗尽了所有数据。

最佳答案

您可以使用 ioctl()FIONREAD 来获取套接字缓冲区中未读字节的数量。

但是,这也是双重系统调用,并且它仍然不能保证在您调用 recv() 之前没有更多数据到达。

但是有一个更简单的方法 - 您可以调用 recv() 并返回实际读取的字节数。如果实际读取的字节数与请求的缓冲区大小相同,则只需重复调用。即使您不重复调用,下一个 select() 调用也会返回是否还有更多数据可供读取。

关于Linux 非阻塞套接字 : how much data can be read before blocking?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39989205/

相关文章:

linux - 设置 bash 命令行变量以启动我的应用程序

c - Ip Tunnel 有开源吗?

linux - 什么是 "sharing filesystem information"?

C++ 套接字只发送前 4 个字节的数据

javascript - Node.js 中的客户端代码

angularjs - 套接字编程 MEAN 堆栈、端口 3000 上的 Express 应用程序和端口 8000 上的 Angular 应用程序

Java序列化,ObjectInputStream.readObject(),检查是否会阻塞

Connect 在客户端返回 -1 和 getaddrinfo

python - 从多个子进程进行非阻塞读取(Python)

c# - Non-Blocking IO是如何实现的?