pypcap icon indicating copy to clipboard operation
pypcap copied to clipboard

get a fd by pcap_get_selectable_fd

Open xirs opened this issue 9 years ago • 4 comments

fd returned by fileno() can't be used by select() or poll(), please refer http://www.tcpdump.org/manpages/pcap_get_selectable_fd.3pcap.html

will pypcap add a new method to return fd by pcap_get_selectable_fd

xirs avatar Jun 16 '16 07:06 xirs

Actually, if you've opened a regular network interface, on most platforms, the descriptor returned by pcap_fileno() is the same as the descriptor returned by pcap_get_selectable_fd(). But it's still best to use pcap_get_selectable_fd() if it's available, as it's not guaranteed to return the same descriptor as pcap_fileno(), and it's more likely to return -1 if, in fact, there is no way to do a select()/poll()/etc. on the device (you can't do them on a DAG card, for example).

guyharris avatar Jul 01 '16 21:07 guyharris

@guyharris you seem to know quite a bit about his.. is there a feature request here? or just documentation/example request?

brifordwylie avatar Jul 01 '16 21:07 brifordwylie

you seem to know quite a bit about his

Being a core libpcap developer for many years helps. :-)

is there a feature request here?

I would say "yes".

I would, on UN*Xes, provide an API that uses pcap_get_selectable_fd() if available and pcap_fileno() otherwise. Whether it should fail or return fileno(pcap_file(pcap)) if pcap_file(pcap) is non-null is another matter - select()/poll() on a plain file should always return TRUE, but that means there's no point in doing a select() or poll() on it unless the program logic makes it harder not to do so.

I would, on Windows, not provide that API, because there isn't a file descriptor that can be provided that would be usable with WinSock's select() call, and would, instead, provide an API that uses pcap_getevent(), which returns a HANDLE that can be used with WaitForSingleObject(), WaitForSingleObjectEx(), WaitForMultipleObjects(), WaitForMultipleObjectsEx(), MsgWaitForMultipleObjects(), and MsgWaitForMultipleObjectsEx().

guyharris avatar Jul 01 '16 21:07 guyharris

@guyharris: you know way more than I do.. you should have write access to the repo now. Please make an Issue/PR at your convenience.

brifordwylie avatar Jul 02 '16 03:07 brifordwylie