blob: e437af8a8e68f29a50c66db89bc02e002a179af1 [file] [log] [blame]
JP Abgrall511eca32014-02-12 13:46:45 -08001.\" @(#) $Header: /tcpdump/master/libpcap/pcap_breakloop.3pcap,v 1.3 2008-04-06 02:53:21 guy Exp $
2.\"
3.\" Copyright (c) 1994, 1996, 1997
4.\" The Regents of the University of California. All rights reserved.
5.\"
6.\" Redistribution and use in source and binary forms, with or without
7.\" modification, are permitted provided that: (1) source code distributions
8.\" retain the above copyright notice and this paragraph in its entirety, (2)
9.\" distributions including binary code include the above copyright notice and
10.\" this paragraph in its entirety in the documentation or other materials
11.\" provided with the distribution, and (3) all advertising materials mentioning
12.\" features or use of this software display the following acknowledgement:
13.\" ``This product includes software developed by the University of California,
14.\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
15.\" the University nor the names of its contributors may be used to endorse
16.\" or promote products derived from this software without specific prior
17.\" written permission.
18.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21.\"
22.TH PCAP_BREAKLOOP 3PCAP "5 April 2008"
23.SH NAME
24pcap_breakloop \- force a pcap_dispatch() or pcap_loop() call to return
25.SH SYNOPSIS
26.nf
27.ft B
28#include <pcap/pcap.h>
29.ft
30.LP
31.ft B
32void pcap_breakloop(pcap_t *);
33.ft
34.fi
35.SH DESCRIPTION
36.B pcap_breakloop()
37sets a flag that will force
38.B pcap_dispatch()
39or
40.B pcap_loop()
41to return rather than looping; they will return the number of packets
42that have been processed so far, or \-2 if no packets have been
43processed so far.
44.PP
45This routine is safe to use inside a signal handler on UNIX or a console
46control handler on Windows, as it merely sets a flag that is checked
47within the loop.
48.PP
49The flag is checked in loops reading packets from the OS - a signal by
50itself will not necessarily terminate those loops - as well as in loops
51processing a set of packets returned by the OS.
52.ft B
53Note that if you are catching signals on UNIX systems that support
54restarting system calls after a signal, and calling pcap_breakloop()
55in the signal handler, you must specify, when catching those signals,
56that system calls should NOT be restarted by that signal. Otherwise,
57if the signal interrupted a call reading packets in a live capture,
58when your signal handler returns after calling pcap_breakloop(), the
59call will be restarted, and the loop will not terminate until more
60packets arrive and the call completes.
61.ft R
62.PP
63.ft B
64Note also that, in a multi-threaded application, if one thread is
65blocked in pcap_dispatch(), pcap_loop(), pcap_next(), or pcap_next_ex(),
66a call to pcap_breakloop() in a different thread will not unblock that
67thread; you will need to use whatever mechanism the OS provides for
68breaking a thread out of blocking calls in order to unblock the thread,
69such as thread cancellation in systems that support POSIX threads.
70.ft R
71.PP
72Note that
73.B pcap_next()
74and
75.B pcap_next_ex()
76will, on some platforms, loop reading packets from the OS; that loop
77will not necessarily be terminated by a signal, so
78.B pcap_breakloop()
79should be used to terminate packet processing even if
80.B pcap_next()
81or
82.B pcap_next_ex()
83is being used.
84.PP
85.B pcap_breakloop()
86does not guarantee that no further packets will be processed by
87.B pcap_dispatch()
88or
89.B pcap_loop()
90after it is called; at most one more packet might be processed.
91.PP
92If \-2 is returned from
93.B pcap_dispatch()
94or
95.BR pcap_loop() ,
96the flag is cleared, so a subsequent call will resume reading packets.
97If a positive number is returned, the flag is not cleared, so a
98subsequent call will return \-2 and clear the flag.
99.SH SEE ALSO
100pcap(3PCAP), pcap_loop(3PCAP), pcap_next_ex(3PCAP)