2016-12-17 388 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