【发布时间】:2016-12-19 15:53:25
【问题描述】:
我有一个循环来使用 pcap_next_ex 捕获数据包,并且在每次迭代中,我都会根据处理数据包进行很多函数调用。这些东西可以通过循环中的 Sleep() 调用来模拟。那么我在 pcap_next_ex() 循环中调用 Sleep 会发生什么?
pcap_pkthdr* header = NULL;
UCHAR* content = NULL;
pcap = pcap_open(adapterName.c_str(), 65536, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, NULL);
//Set to nonblock mode?
while (INT res = pcap_next_ex(pcap, &header, const_cast<const UCHAR**>(&content)) >= 0)
{
if (res != FALSE)
{
if (content)
{
//Here i do the stuff which I will simulate with a Sleep() call
Sleep(200);
}
}
}
我已经看到使用 pcap_next_ex 并将数据包保存在向量中以便稍后使用另一个线程处理它们的代码,这种方法显着减少了这些东西的时间,但并不能说服我很多。我要不要用这个方法?
我想使用其他 winpcap 函数以“非阻塞”模式捕获数据包,并为每个到来的数据包调用一个事件......使用 winpcap 不丢失数据包的最佳方法是什么?。
任何帮助将不胜感激。问候。
【问题讨论】:
-
我遇到了同样的问题。我没有立即处理 packet_data,而是将 packet_data 推入队列并在其他线程中处理 packet_data。
标签: c networking packet-capture winpcap