On Mon, 4 Jun 2001, Guy Harris wrote: > On Mon, Jun 04, 2001 at 12:46:01PM -0300, WEI QU wrote: > > But it seems if there is no packet the pcap_dispatch can capture, it will > > block although I set the timeout in pcap_open_live(), the "Other > > Statements" will never have a chance to be executed if there is no packet > > for capture. > > Correct - there are several platforms on which either the OS doesn't > provide a timeout in the packet capture mechanism (Linux, IRIX, some > DLPI platforms, e.g. HP-UX) or where the timeout doesn't go off unless > at least one packet has arrived and passed the capture filter (Solaris); > on those platforms the libpcap timeout either has no effect (Linux, > IRIX, some DLPI platforms) or just batches together packets without > giving the program a chance to do something else if no packets arrive > (Solaris). > > What do the other statements do? I.e., what is your program doing other > than the work done in the callback function? You may want to handle this > with, for example, "select()" or "poll()", waiting either for packets to > arrive or for something else to happen (although note that "select()" > and "poll()" don't work correctly on most BSD platforms, although I > think it may work on more recent versions of OpenBSD). > - > This is the TCPDUMP workers list. It is archived at > http://www.tcpdump.org/lists/workers/index.html > To unsubscribe use mailto:[EMAIL PROTECTED]?body=unsubscribe > For me, timeouts work quite perfect, using select(). "Even" :) on BSD. You just need to set BIOCIMMEDIATE ioctl on the bpf device. I added this by myself on a higher-level, since pcap seems to miss it in the BSD code. Sebastian --- "Please stop the earth. Let me off." - This is the TCPDUMP workers list. It is archived at http://www.tcpdump.org/lists/workers/index.html To unsubscribe use mailto:[EMAIL PROTECTED]?body=unsubscribe
