/** @ingroup wpcap_tut
 */


/** @defgroup wpcap_tut4 Capturing the packets without the callback
 *  @{

The sample showed in this lesson behaves exacltly like the one of the previous one (\ref wpcap_tut2), but it uses pcap_next_ex() instead of pcap_loop().

The callback-based capture mechanism of pcap_loop() is elegant and it could be a good choice in some situations. However, handling a callback is sometimes not practical: it often makes the program more complex and it becomes a pain in situations like multithreaded applications or C++ classes.

In these cases, pcap_next_ex() allows to receive the packets with a direct call. Using pcap_next_ex() gives the complete control of the code to the programmer because the packets are received only when the programmer wants them.

The parameters of this function are the same of a capture callback: it receives an adapter descriptor and a couple of pointers that will be initialized and returned to the user: one to a pcap_pkthdr structure and another to a buffer with the packet data. 

In the following program, we recycle the callback code of the previous lesson's example and move it inside the main of the program, after the call to pcap_next_ex().


\include misc/basic_dump_ex.c

Why do we use pcap_next_ex() instead of the old pcap_next()? Because pcap_next() has some annoying limitations. First of all, it is inefficient because it hides the callback method but still relies on pcap_dispatch(). Second, it is not able to detect EOF, so it's hardly useful when gathering packets from a file.

Notice instead that pcap_next_ex() returns different values for success, timeout elapsed, error and EOF conditions. 

\ref wpcap_tut3 "<<< Previous" \ref wpcap_tut5 "Next >>>"

@}*/
