2014-03-25 35 views
0

在Berkeley套接字中,recv函数是否带有MSG_WAITALL标志集,取代了具有多个读取函数,直到读取完整个数据为止?Berkeley套接字中MSG_WAITALL的机制

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

回答

1

是的,MSG_WAITALL告诉recv()要等到所有请求的字节都被读取。但是,它仅在阻塞模式下支持,而不在非阻塞模式下支持,并且只能在面向流的套接字(如TCP)上使用。即使如此,如果recv()被信号中断,并且必须再次调用才能继续读取,您仍然必须循环,例如在Linux上。