Berkeley socket中MSG_WAITALL的机制

时间:2014-03-25 22:33:49

标签: sockets

在Berkeley套接字中,是设置了MSG_WAITALL标志的recv函数,替换了多个读取函数,直到读取了所请求的整个数据?

我的意思是recv函数读取由一次调用中的大小确定的整个块,而read函数可能读取数据块的一部分,我需要在循环中多次调用它,直到读取整个块?

1 个答案:

答案 0 :(得分:1)

是的,MSG_WAITALL告诉recv()等待所有请求的字节都被读取。但是,它仅在阻塞模式下支持,而不是在非阻塞模式下,并且它仅适用于面向流的套接字,如TCP。即使这样,你仍然需要循环,例如在Linux上recv()被信号打断并且必须再次被调用以继续阅读。