代码之家  ›  专栏  ›  技术社区  ›  Afshin

UDP套接字和MSG_PEEK

  •  0
  • Afshin  · 技术社区  · 4 年前

    当我们使用 recvfrom() 要从UDP套接字读取数据包,我们无法部分读取它。因为如果我们先读取UDP数据包的一小部分(通过传递一个小缓冲区),则数据包的提醒将被丢弃,如下所述:

    所有接收操作只返回一个数据包。当数据包 小于传递的缓冲区,只返回那么多数据;什么时候 它更大,包是 截断 以及 MSG_TRUNC 标志已经设定。

    但我想知道,如果我们只是使用 MSG_PEEK 旗帜。如果我只是偷看UDP消息,数据包的提醒会被丢弃吗?

    0 回复  |  直到 4 年前
        1
  •  2
  •   Jeremy Friesner    4 年前

    如果我只是偷看UDP消息,数据包的提醒会被丢弃吗?

    不会有任何东西被丢弃,因为 MSG_PEEK 标志设置后,套接字传入数据缓冲区的状态未被修改;整个数据包将保留在套接字的缓冲区中。

    当然,只有数据包的第一部分数据会被复制到太小的目标数据缓冲区中。