Linux UDP套接字和MSG_PEEK

Linux UDP套接字和MSG_PEEK,linux,sockets,Linux,Sockets,当我们使用recvfrom()从UDP套接字读取数据包时,我们无法部分读取它。因为如果我们先读取UDP数据包的一小部分(通过传递一个小缓冲区),数据包的提醒将被丢弃,如下所述: 所有接收操作只返回一个数据包。当包被打开时 小于传递的缓冲区,只返回那么多数据;什么时候 它更大,数据包被截断,并且设置了MSG_TRUNC标志 但我想知道如果我们只是使用MSG_PEEK标志检查数据包,是否会发生同样的情况。如果我只是偷看UDP消息,数据包提醒会被删除吗 如果我只是偷看UDP消息,数据包提醒会被删除吗

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

所有接收操作只返回一个数据包。当包被打开时 小于传递的缓冲区,只返回那么多数据;什么时候 它更大,数据包被截断,并且设置了MSG_TRUNC标志

但我想知道如果我们只是使用
MSG_PEEK
标志检查数据包,是否会发生同样的情况。如果我只是偷看UDP消息,数据包提醒会被删除吗

如果我只是偷看UDP消息,数据包提醒会被删除吗

不会删除任何内容,因为设置了
MSG_PEEK
标志后,套接字的传入数据缓冲区的状态不会被修改;整个数据包将保留在套接字的缓冲区中


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

为什么不编写一些简单的测试代码来检查行为,然后回来报告呢?