我创建了一个原始套接字,它从数据链路层获取所有 IPv4 数据包(删除了数据链路层标头)。为了读取我使用的数据包recvfrom
.
我的疑问是:
假设由于操作系统进行了一些调度,我的进程休眠了 1 秒。当它醒来时,它做到了recvfrom
(要接收的字节数为 1000)在此原始套接字上(目的是接收only oneIPv4 数据包并假设该数据包的大小为 380 字节)。并且假设在此期间许多网络应用程序也同时运行,因此所有 IPv4 数据包必须已在此套接字的接收缓冲区中排队。所以现在recvfrom
将返回所有 1000 字节(以及从第 381 字节开始的其他 IPv4 数据包),因为它的缓冲区中有足够的数据可以返回。虽然我的程序只打算理解一个 IPv4 数据包
那么如何预防这种事情呢?我应该逐字节读取并解析每个字节,但效率非常低。
IIRC, recvfrom()
即使队列中有更多数据包,一次也只会返回一个数据包。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)