Go to main content

man pages section 3: Extended Library Functions, Volume 1

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

pcap_breakloop (3pcap)

Name

pcap_breakloop - force a pcap_dispatch() or pcap_loop() call to return

Synopsis

#include <pcap/pcap.h>

void pcap_breakloop(pcap_t *);

Description

PCAP_BREAKLOOP(3pcap)                                    PCAP_BREAKLOOP(3pcap)



NAME
       pcap_breakloop - force a pcap_dispatch() or pcap_loop() call to return

SYNOPSIS
       #include <pcap/pcap.h>

       void pcap_breakloop(pcap_t *);

DESCRIPTION
       pcap_breakloop()  sets  a  flag that will force pcap_dispatch(3PCAP) or
       pcap_loop(3PCAP) to return rather than looping; they  will  return  the
       number  of packets that have been processed so far, or PCAP_ERROR_BREAK
       if no packets have been processed so far.

       This routine is safe to use inside a signal handler on UNIX or  a  con-
       sole  control  handler  on  Windows,  as  it merely sets a flag that is
       checked within the loop.

       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.  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 com-
       pletes.

       Note also that, in a  multi-threaded  application,  if  one  thread  is
       blocked   in   pcap_dispatch(),   pcap_loop(),   pcap_next(3PCAP),   or
       pcap_next_ex(3PCAP), a call to 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 or thread signalling in
       systems that support POSIX threads, or  SetEvent()  on  the  result  of
       pcap_getevent()  on a pcap_t on which the thread is blocked on Windows.
       Asynchronous procedure calls will not work  on  Windows,  as  a  thread
       blocked on a pcap_t will not be in an alertable state.

       Note  that pcap_next() and pcap_next_ex() will, on some platforms, loop
       reading packets from the OS; that loop will not necessarily  be  termi-
       nated  by  a  signal,  so  pcap_breakloop() should be used to terminate
       packet processing even if pcap_next() or pcap_next_ex() is being used.

       pcap_breakloop() does not guarantee that no  further  packets  will  be
       processed by pcap_dispatch() or pcap_loop() after it is called; at most
       one more packet might be processed.

       If PCAP_ERROR_BREAK is returned from  pcap_dispatch()  or  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  subse-
       quent call will return PCAP_ERROR_BREAK and clear the flag.


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       +---------------+------------------------+
       |ATTRIBUTE TYPE |    ATTRIBUTE VALUE     |
       +---------------+------------------------+
       |Availability   | system/library/libpcap |
       +---------------+------------------------+
       |Stability      | Uncommitted            |
       +---------------+------------------------+

SEE ALSO
       pcap(3PCAP)



NOTES
       Source  code  for open source software components in Oracle Solaris can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-
       code-downloads.html.

       This     software     was    built    from    source    available    at
       https://github.com/oracle/solaris-userland.   The  original   community
       source   was   downloaded  from   https://www.tcpdump.org/release/libp-
       cap-1.9.1.tar.gz.

       Further information about this software can be found on the open source
       community website at https://www.tcpdump.org/.



                                 25 July 2018            PCAP_BREAKLOOP(3pcap)