【问题标题】:Mechanism of MSG_WAITALL in Berkeley socketBerkeley socket中MSG_WAITALL的机制
【发布时间】:2014-03-26 06:40:25
【问题描述】:

在 Berkeley 套接字中,recv 函数是否设置了 MSG_WAITALL 标志,取代了多个读取函数,直到请求的全部数据都被读取?

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

【问题讨论】:

    标签: sockets


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-05-04
      • 1970-01-01
      • 2012-09-09
      • 2018-02-02
      • 2012-12-16
      • 2019-11-30
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      相关资源
      最近更新 更多