From: Guy Harris Date: Mon, 12 Oct 2009 05:44:39 +0000 (-0700) Subject: Snow Leopard fixes poll() and kqueues to work on BPF devices (and ttys). X-Git-Tag: libpcap-1.1.0~69 X-Git-Url: https://git.tcpdump.org/libpcap/commitdiff_plain/0c8f81c82182cebd6981ea205a56e3581cc4a775 Snow Leopard fixes poll() and kqueues to work on BPF devices (and ttys). Describe what happens with select() and poll() on Linux if the device on which you're capturing goes away. --- diff --git a/pcap_get_selectable_fd.3pcap b/pcap_get_selectable_fd.3pcap index 6cc4aa19..123671a0 100644 --- a/pcap_get_selectable_fd.3pcap +++ b/pcap_get_selectable_fd.3pcap @@ -104,6 +104,36 @@ can be used on the descriptor returned by .B poll() cannot be used on it those versions of Mac OS X. Kqueues also don't work on that descriptor. +.BR poll() , +but not kqueues, work on that descriptor in Mac OS X releases prior to +10.4; +.B poll() +and kqueues work on that descriptor in Mac OS X 10.6 and later. +.PP +On Linux, if the network interface on which you're capturing disappears +(e.g., if a USB interface is unplugged), select) will return an +indication that the descriptor has data available to read. If libpcap +is not using memory-mapped mode to capture, the attempt to read the next +packet will return an error; however, if it is using memory-mapped mode +to capture, which it will do if the kernel includes support for +memory-mapped mode, no packet or error will be returned if you have put +the +.B pcap_t +into non-blocking mode. You must use +.B poll() +in this case; +.B poll() +will return a +.B POLLERR +indication; a +.BR recv (2), +.BR recvfrom(2), +or +.BR recvmsg (2) +on the descriptor will return \-1 and set +.B errno +to +.B ENETDOWN. .PP .B pcap_get_selectable_fd() is not available on Windows. @@ -111,4 +141,4 @@ is not available on Windows. A selectable file descriptor is returned if one exists; otherwise, \-1 is returned. .SH SEE ALSO -pcap(3PCAP), select(2), poll(2) +pcap(3PCAP), select(2), poll(2), recv(2)