pcap_loop and pcap_dispatch Difference

我怕爱的太早我们不能终老 提交于 2019-12-09 15:08:21

问题


What exactly is the difference between pcap_loop and pcap_dispatch?


回答1:


The manual describes this amazingly well (I'm saying that with a straight face, promise). From man pcap_loop:

   pcap_loop() processes packets from a  live  capture  or  ``savefile''
   until  cnt  packets  are  processed,  the  end of the ``savefile'' is
   reached when reading from a ``savefile'', pcap_breakloop() is called,
   or  an  error  occurs.   It  does  not return when live read timeouts
   occur.  A value of -1 or 0 for cnt is equivalent to infinity, so that
   packets are processed until another ending condition occurs.

   pcap_dispatch() processes packets from a live capture or ``savefile''
   until cnt packets are processed, the end of the current bufferful  of
   packets  is reached when doing a live capture, the end of the ``save‐
   file'' is reached when reading from a ``savefile'',  pcap_breakloop()
   is  called, or an error occurs.  Thus, when doing a live capture, cnt
   is the maximum number of packets to process before returning, but  is
   not a minimum number; when reading a live capture, only one bufferful
   of packets is read at a time, so fewer than cnt packets may  be  pro‐
   cessed. A value of -1 or 0 for cnt causes all the packets received in
   one buffer to be processed when reading a live  capture,  and  causes
   all  the  packets  in the file to be processed when reading a ``save‐
   file''.

I know you didn't really want to read and understand all that, so let's break it down.

Both functions:

  • Process packets from a live capture or "savefile" until any of these conditions occur:
    • the specified count is reached
    • the end of the "savefile" is reached
    • pcap_breakloop() is called
    • an error occurs
  • Consider -1 or 0 to essentially mean "process an infinite number of packets" - that is, until another end condition occurs. (-1 is recommended for interoperability with older versions, later in the manual)

pcap_dispatch() alone

  • Also returns after the end of the current bufferful of packets is reached, when doing a live capture (in other words, can return more often, since the specified count is not a minimum)


来源:https://stackoverflow.com/questions/4917056/pcap-loop-and-pcap-dispatch-difference

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!