在recv()
函数的文档中写道:
MSG_WAITALL
此标志请求操作块直到满 请求得到满足。但是,呼叫仍可能返回较少的数据 如果信号被捕获,则发出错误或断开连接, 或者要接收的下一个数据的类型不同 回。该标志对数据报套接字没有影响。
好的,所以它会阻塞,直到满足完整的请求。在我的情况下,我通过带有recv()
标志的MSG_WAITALL
以阻塞模式将数据读取到4KB缓冲区。我肯定(因为协议)传入的数据大小小于4KB(大约是几百字节),但是这个调用没有阻塞,它立即返回,返回值当然不是4KB(它正如预期的那样大约是几百个字节)。那么使用MSG_WAITALL
又有什么意义呢?如果没有这样的可用数据,则立即返回。在哪些情况下使用此标志是必要的?请解释一下。
我在mac os x(TCP)上测试它。