我有一个问题,想象一下,我有一个线程可以捕获数据包并自行处理它们。
使用pcap_next_ex
:我会使用一个循环,我会在每次交互中处理数据包,假设我调用Sleep(200)
来模拟这些东西。随着pcap_next_ex
,我会在我丢失数据包时到达。
使用pcap_loop
:我会对每个数据包使用一个数据包处理程序的回调,它会像事件一样工作。在数据包处理程序中,我会处理数据包,并假设我调用Sleep(200)
来模拟这些东西。我会丢包吗?
答案 0 :(得分:6)
是
pcap_next_ex
和pcap_loop
调用从环形缓冲区读取数据包的相同内部函数。不同之处仅在于前者返回数据包,后者则使用数据包调用回调。
pcap_loop
在与调用pcap_loop
的线程相同的线程中调用回调,并在读取下一个数据包之前等待回调完成其任务。
因此,如果回调需要很长时间,pcap_loop
无法经常读取数据包,这会导致丢失数据包的可能性更大。