MSG_WAITALL不会阻止在mac os x上读取

时间:2017-04-14 20:30:57

标签: c macos sockets

recv()函数的文档中写道:

MSG_WAITALL

  

此标志请求操作块直到满   请求得到满足。但是,呼叫仍可能返回较少的数据   如果信号被捕获,则发出错误或断开连接,   或者要接收的下一个数据的类型不同   回。该标志对数据报套接字没有影响。

好的,所以它会阻塞,直到满足完整的请求。在我的情况下,我通过带有recv()标志的MSG_WAITALL以阻塞模式将数据读取到4KB缓冲区。我肯定(因为协议)传入的数据大小小于4KB(大约是几百字节),但是这个调用没有阻塞,它立即返回,返回值当然不是4KB(它正如预期的那样大约是几百个字节)。那么使用MSG_WAITALL又有什么意义呢?如果没有这样的可用数据,则立即返回。在哪些情况下使用此标志是必要的?请解释一下。

我在mac os x(TCP)上测试它。

0 个答案:

没有答案