frederic heem wrote:

> Do you mean that on Solaris, when a read blocks and no packet arrives, the 
> read hangs forever ?

Yes.

The purpose of the timer on Solaris is *NOT* to ensure that reads always 
complete within a fixed period of time.  The purpose of the timer is to 
ensure that if packets are arriving slowly, a packet won't remain queued 
up and unread indefinitely.

The pcap man page explicitly avoids making any claim that the timer will 
ensure that a read will complete within the timeout period.

>> I.e., any code that depends on the timer preventing a read on a pcap_t
>> from taking more than the specified amount of time is depending on
>> something that libpcap does not and will not guarantee (and the libpcap
>> man page explicitly indicates this).  Does your code depend on that?
> Indeed, it depends on the fact that pcap_breakloop shall return in a time 
> which ha to be predictable.  See other bug report about this subject: 
> https://sourceforge.net/tracker/index.php?func=detail&aid=1575387&group_id=53067&atid=469577

The problem there is that there's no way for a pcap_breakloop() call in 
one thread to "poke" the descriptor/handle associated with a pcap_t to 
force it to return (other than to close it, but pcap_breakloop() is 
intended to leave the pcap_t usable; a reopen of the device, followed by 
a replacement of the descriptor in the pcap_t with the new descriptor, 
followed by a close of the original device, might achieve that, although 
that'd have to be done carefully to ensure it's thread-safe).

If you call pcap_breakloop() within a signal handler, and the signal is 
delivered to the thread reading from the descriptor, and the signal is 
set to interrupt system calls, pcap_breakloop() will work.
_______________________________________________
Wireshark-dev mailing list
Wireshark-dev@wireshark.org
http://www.wireshark.org/mailman/listinfo/wireshark-dev

Reply via email to