相对简单的问题:例如,使用 Linux 非阻塞套接字执行 recv() 时,有没有办法先验地确定可以接收多少数据?
似乎我总是要结束额外的 recv() 调用来确定我已经耗尽了所有数据。
最佳答案
您可以使用 ioctl()
和 FIONREAD
来获取套接字缓冲区中未读字节的数量。
但是,这也是双重系统调用,并且它仍然不能保证在您调用 recv()
之前没有更多数据到达。
但是有一个更简单的方法 - 您可以调用 recv()
并返回实际读取的字节数。如果实际读取的字节数与请求的缓冲区大小相同,则只需重复调用。即使您不重复调用,下一个 select()
调用也会返回是否还有更多数据可供读取。
关于Linux 非阻塞套接字 : how much data can be read before blocking?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39989205/