示例代码如下:
pcap_t *device = pcap_open_live(conf.dev, 65535, 1, 0, errbuf);
if(!device)
{
be_printf("%s is failed line = %d\n", __FUNCTION__, __LINE__);
return -1;
}
// FreeBsd 如果不设置该选项,则抓包函数存在延时
pcap_setnonblock(device, 1, errbuf);
int bl = pcap_getnonblock(device, errbuf);
printf("bl = %d\n", bl);
/* 开始捕获 */
while((res = pcap_next_ex(hpcap, &header, &pkt_data)) >= 0)
{
// 处理函数
}
如果不设置pcap_setnonblock(...) 信息, pcap_next_ex, pcap_loop等函数,会延时获取到数据包。