tcpdump mailing list archives

Re: pcap_loop() not returning after pcap_breakloop() until another packet arrives


From: Guy Harris <guy () alum mit edu>
Date: Mon, 26 Jun 2006 15:09:57 -0700


On Jun 24, 2006, at 10:50 PM, Richard Hansen wrote:

I have one thread that sits in pcap_loop() and another thread that calls pcap_breakloop() when it is time to shut down. My code works well on Windows (WinPcap 3.1).

Well, sort of. I suspect that pcap_breakloop() doesn't *immediately* break you out of the loop - it's probably delayed until a packet arrives *or* the timeout expires.

On Linux (libpcap 0.9.4, kernel 2.6.16) the pcap_loop() doesn't return after calling pcap_breakloop() until another packet arrives. Is this expected or proper behavior?

Expected, yes. Linux's packet capture mechanism doesn't have the timeouts that the WinPcap driver, BPF, etc. do.

How can I tell Linux to return from that readfrom() call that it's blocking on?

You *might* be able to do it with pthread_cancel(), although that will, ultimately, terminate the thread (unless a cleanup handler never returns).
-
This is the tcpdump-workers list.
Visit https://lists.sandelman.ca/ to unsubscribe.


Current thread: