2016-12-17 386 views
1

我有一个问题,想象一下,我有一个线程捕获数据包并处理它们自己。Winpcap - pcap_next_ex vs pcap_loop

pcap_next_ex:我会使用一个循环,我会处理每个交互中的数据包,假设我打电话Sleep(200)来模拟这些东西。随着pcap_next_ex我会到达我会丢失数据包的时刻。

pcap_loop:我会使用回调到每个数据包传入的数据包处理程序,它将像事件一样工作。在数据包处理程序中,我会对数据包进行处理,并假设我调用Sleep(200)来模拟这些数据。我会丢包吗?

回答

3

是的。

pcap_next_expcap_loop调用相同的内部函数从环形缓冲区中读取数据包。区别仅在于前者返回数据包,后者则使用数据包调用回调。

pcap_loop在与称为pcap_loop的线程相同的线程中调用回调,并在读取下一个数据包之前等待回调完成其任务。 因此,如果回调需要很长时间,pcap_loop不能够频繁地读取数据包,这会导致丢失数据包的可能性增大。

+0

谢谢老兄,我的疑问已解决 – KaxperdayTrolling

+0

我想你会看到我有一个代码,导致我使用winpcap进行NAT到代理本地服务器的问题。我在社区中是新的,我想给你一个PM。问候。 – KaxperdayTrolling

+0

好的。我的联系方式是[email protected] – kaitoy