]> The Tcpdump Group git mirrors - libpcap/commitdiff
Snow Leopard fixes poll() and kqueues to work on BPF devices (and ttys).
authorGuy Harris <[email protected]>
Mon, 12 Oct 2009 05:44:39 +0000 (22:44 -0700)
committerGuy Harris <[email protected]>
Mon, 12 Oct 2009 05:44:39 +0000 (22:44 -0700)
Describe what happens with select() and poll() on Linux if the device on
which you're capturing goes away.

pcap_get_selectable_fd.3pcap

index 6cc4aa195e0e463ecba25f993337f63f8bcfb640..123671a04c818aa52193a6ece22571aadf41c8fd 100644 (file)
@@ -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.
 .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.
 .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
 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)