On Aug 24, 2010, at 10:49 AM, Gianluca Varenni wrote:

> The main problem would be linux, where the only behavior is not flushing the 
> buffers. So either you have a broken API like pcap_setfilter that is 
> supposed to flush the buffer (but it doesn't) or you break the linux 
> applications by adding the pcap_setfilter_noflush and have pcap_setfilter 
> fail on linux. Something broken in both cases...

Eh?

        On those BPF-based systems with the BIOCSETFNR ioctl, pcap_setfilter() 
flushes the buffer and pcap_setfilter_noflush() doesn't.

        On those BPF-based systems without the BIOCSETFNR ioctl, 
pcap_setfilter() flushes the buffer and pcap_setfilter_noflush() returns an 
error.

        On Linux, pcap_setfilter() flushes the buffer because it makes an 
effort to do so (see set_kernel_filter() in pcap-linux.c) and 
pcap_setfilter_noflush() doesn't (because it doesn't go through all the effort 
to do so that pcap_setfilter() does).

        On Windows, if WinPcap added a call to change the filter without 
flushing, pcap_setfilter() flushes the buffer and pcap_setfilter_noflush() 
doesn't.

        On systems without kernel-based filtering, neither of them flush the 
buffer, as the next packet read after the filter is changed is run through the 
new filter.

        On other systems with kernel-based filtering and without a "change 
filter without flushing the buffer" call, pcap_setfilter() flushes the buffer 
and pcap_setfilter_noflush() returns an error.
_______________________________________________
Winpcap-users mailing list
[email protected]
https://www.winpcap.org/mailman/listinfo/winpcap-users

Reply via email to