如何使用libpcap通过poll()接收以太网帧

时间:2013-11-17 09:11:18

标签: c linux libpcap

我有一个项目,它使用poll()来处理包括TCP和以太网在内的网络通信。轮询用于支持TCP或UDP连接。接下来我想使用libpcap接收帧并使用poll()将libpcap集成到此代码中。

poll()需要知道文件描述符,但pcap不返回文件描述符。如何使用poll()系统管理pcap。

该项目采用Linux上的C代码。我不想使用原始套接字的原因是为了提高pcap的效率。

2 个答案:

答案 0 :(得分:0)

如果在UN * X上,您有来自pcap_t *pcap_open_live() / pcap_create()等来电的pcap_activate(),则可以获取文件描述符调用poll()select()pcap_get_selectable_fd()或类似的内容。请注意,它可以返回-1,这意味着select() / poll() /等。您正在使用的操作系统版本上的特定设备不支持。 (操作系统版本对Linux来说无关紧要,但对某些BSD来说可能很重要。)

答案 1 :(得分:0)

根据Linux manual。您可以使用pcap_get_selectable_fd。但它在大多数BSD上都不可靠。 Some network devices opened with pcap_create() and pcap_activate(), or with pcap_open_live(), do not support select() or poll() (for example, regular network devices on FreeBSD 4.3 and 4.4, and Endace DAG devices), so -1 is returned for those devices.有关详细信息,请参阅手册。