On Mon, Nov 03, 2003 at 07:24:39PM -0800, Guy Harris wrote:
> Ideally, the signal handler should just be able to force the capture 
> loop to terminate; there currently isn't a "force the loop to 
> terminate" API - I've done some work on implementing one, and should 
> probably go back and finish it.

Well, I've added that API - "pcap_breakloop()"; it takes as an argument
a "pcap_t *", and sets a flag in that "pcap_t" to cause packet capturing
loops to be terminated.

Note that, in order for this to work on UNIX systems with restartable
system calls (most if not all of them at this point), if you set up a
handler for a signal, and that handler will call "pcap_breakloop()", you
must NOT specify, when you set up the signal handler, that the signal
should restart system calls.

If a "pcap_dispatch()" or "pcap_loop()" loop is terminated by
"pcap_breakloop()" being called, they return -2.  Applications that use
"pcap_breakloop()" must not assume that a negative return from those
routines mean an error occurred while capturing packets; only a return
value of -1 means that.  (In applications that don't call
"pcap_breakloop()" and don't use libraries that call "pcap_breakloop()",
those routines will never return -2, so they can safely check for
negative values - i.e., this doesn't break existing applications.)

I've converted tcpdump to use that API if available.
-
This is the TCPDUMP workers list. It is archived at
http://www.tcpdump.org/lists/workers/index.html
To unsubscribe use mailto:[EMAIL PROTECTED]

Reply via email to