我有一个项目,它使用poll()来处理包括TCP和以太网在内的网络通信。轮询用于支持TCP或UDP连接。接下来我想使用libpcap接收帧并使用poll()将libpcap集成到此代码中。
poll()需要知道文件描述符,但pcap不返回文件描述符。如何使用poll()系统管理pcap。
该项目采用Linux上的C代码。我不想使用原始套接字的原因是为了提高pcap的效率。
答案 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.
有关详细信息,请参阅手册。