UDP套接字和MSG_PEEK

3
当我们使用recvfrom()从UDP套接字读取数据包时,无法部分读取。因为如果我们首先只读取UDP数据包的一小部分(通过传递一个小缓冲区),则剩余的数据包将会被丢弃,如此处所述:

所有接收操作仅返回一个数据包。 当数据包小于传递的缓冲区时,仅返回那么多数据; 当数据包大于缓冲区时,则截断该数据包,并设置MSG_TRUNC标志。

但我想知道,如果我们只使用MSG_PEEK标志来检查数据包,是否会发生同样的情况?如果我只是窥视UDP消息,数据包的剩余部分会被丢弃吗?

1
为什么不编写一些简单的测试代码来检查行为,然后回来在这里报告呢? - kaylum
1个回答

2

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

不会有任何数据包被丢弃,因为使用MSG_PEEK标志时,套接字的入站数据缓冲区状态不会被修改;整个数据包将保留在套接字的缓冲区中。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接