我有一台服务器接收连续的数据流.与从套接字多次读取相反,我想通过一次系统调用来读取套接字接收缓冲区中的整个数据read().
当然,我可以传递一个大缓冲区,read()并尝试用所有可用数据填充它.但这会浪费大量内存,因为malloc的缓冲区大多数时候都比socket上的实际数据大.有没有办法查询套接字上的可用数据?
fiz*_*zer 52
是:
#include <sys/ioctl.h>
...
int count;
ioctl(fd, FIONREAD, &count);
Run Code Online (Sandbox Code Playgroud)
不,那里没有。即使有办法做到这一点,您得到的任何答案都将立即过时(因为新数据可能随时到达)。
请注意,当您将缓冲区传递给 时,当有任意数量的数据要读取(至少一个字节)时,read()该函数将返回,而不是等待缓冲区完全填满。