pcap_breakloop.3pcap 4.0 KB

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