在Berkeley套接字中,是设置了MSG_WAITALL标志的recv函数,替换了多个读取函数,直到读取了所请求的整个数据?
我的意思是recv函数读取由一次调用中的大小确定的整个块,而read函数可能读取数据块的一部分,我需要在循环中多次调用它,直到读取整个块?
答案 0 :(得分:1)
是的,MSG_WAITALL
告诉recv()
等待所有请求的字节都被读取。但是,它仅在阻塞模式下支持,而不是在非阻塞模式下,并且它仅适用于面向流的套接字,如TCP。即使这样,你仍然需要循环,例如在Linux上recv()
被信号打断并且必须再次被调用以继续阅读。