106 lines
3.8 KiB
Plaintext
106 lines
3.8 KiB
Plaintext
|
.\" @(#) $Header: /tcpdump/master/libpcap/pcap_breakloop.3pcap,v 1.1.2.3 2008-04-06 03:21:55 guy Exp $
|
||
|
.\"
|
||
|
.\" Copyright (c) 1994, 1996, 1997
|
||
|
.\" The Regents of the University of California. All rights reserved.
|
||
|
.\"
|
||
|
.\" Redistribution and use in source and binary forms, with or without
|
||
|
.\" modification, are permitted provided that: (1) source code distributions
|
||
|
.\" retain the above copyright notice and this paragraph in its entirety, (2)
|
||
|
.\" distributions including binary code include the above copyright notice and
|
||
|
.\" this paragraph in its entirety in the documentation or other materials
|
||
|
.\" provided with the distribution, and (3) all advertising materials mentioning
|
||
|
.\" features or use of this software display the following acknowledgement:
|
||
|
.\" ``This product includes software developed by the University of California,
|
||
|
.\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
||
|
.\" the University nor the names of its contributors may be used to endorse
|
||
|
.\" or promote products derived from this software without specific prior
|
||
|
.\" written permission.
|
||
|
.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||
|
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||
|
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
.\"
|
||
|
.TH PCAP_BREAKLOOP 3PCAP "5 April 2008"
|
||
|
.SH NAME
|
||
|
pcap_breakloop \- force a pcap_dispatch() or pcap_loop() call to return
|
||
|
.SH SYNOPSIS
|
||
|
.nf
|
||
|
.ft B
|
||
|
#include <pcap/pcap.h>
|
||
|
.ft
|
||
|
.LP
|
||
|
.ft B
|
||
|
void pcap_breakloop(pcap_t *);
|
||
|
.ft
|
||
|
.fi
|
||
|
.SH DESCRIPTION
|
||
|
.B pcap_breakloop()
|
||
|
sets a flag that will force
|
||
|
.B pcap_dispatch()
|
||
|
or
|
||
|
.B pcap_loop()
|
||
|
to return rather than looping; they will return the number of packets
|
||
|
that have been processed so far, or \-2 if no packets have been
|
||
|
processed so far.
|
||
|
.PP
|
||
|
This routine is safe to use inside a signal handler on UNIX or a console
|
||
|
control handler on Windows, as it merely sets a flag that is checked
|
||
|
within the loop.
|
||
|
.PP
|
||
|
The flag is checked in loops reading packets from the OS - a signal by
|
||
|
itself will not necessarily terminate those loops - as well as in loops
|
||
|
processing a set of packets returned by the OS.
|
||
|
.ft B
|
||
|
Note that if you are catching signals on UNIX systems that support
|
||
|
restarting system calls after a signal, and calling pcap_breakloop()
|
||
|
in the signal handler, you must specify, when catching those signals,
|
||
|
that system calls should NOT be restarted by that signal. Otherwise,
|
||
|
if the signal interrupted a call reading packets in a live capture,
|
||
|
when your signal handler returns after calling pcap_breakloop(), the
|
||
|
call will be restarted, and the loop will not terminate until more
|
||
|
packets arrive and the call completes.
|
||
|
.PP
|
||
|
Note also that, in a multi-threaded application, if one thread is
|
||
|
blocked in
|
||
|
.BR pcap_dispatch() ,
|
||
|
.BR pcap_loop() ,
|
||
|
.BR pcap_next() ,
|
||
|
or
|
||
|
.BR pcap_next_ex() ,
|
||
|
a call to
|
||
|
.B pcap_breakloop()
|
||
|
in a different thread will not unblock that thread; you will need to use
|
||
|
whatever mechanism the OS provides for breaking a thread out of blocking
|
||
|
calls in order to unblock the thread, such as thread cancellation in
|
||
|
systems that support POSIX threads.
|
||
|
.ft R
|
||
|
.PP
|
||
|
Note that
|
||
|
.B pcap_next()
|
||
|
and
|
||
|
.B pcap_next_ex()
|
||
|
will, on some platforms, loop reading packets from the OS; that loop
|
||
|
will not necessarily be terminated by a signal, so
|
||
|
.B pcap_breakloop()
|
||
|
should be used to terminate packet processing even if
|
||
|
.B pcap_next()
|
||
|
or
|
||
|
.B pcap_next_ex()
|
||
|
is being used.
|
||
|
.PP
|
||
|
.B pcap_breakloop()
|
||
|
does not guarantee that no further packets will be processed by
|
||
|
.B pcap_dispatch()
|
||
|
or
|
||
|
.B pcap_loop()
|
||
|
after it is called; at most one more packet might be processed.
|
||
|
.PP
|
||
|
If \-2 is returned from
|
||
|
.B pcap_dispatch()
|
||
|
or
|
||
|
.BR pcap_loop() ,
|
||
|
the flag is cleared, so a subsequent call will resume reading packets.
|
||
|
If a positive number is returned, the flag is not cleared, so a
|
||
|
subsequent call will return \-2 and clear the flag.
|
||
|
.SH SEE ALSO
|
||
|
pcap(3PCAP), pcap_loop(3PCAP), pcap_next_ex(3PCAP)
|