[Winpcap-users] pcap_loop pointers

Gianluca Varenni gianluca.varenni at cacetech.com
Tue Sep 18 15:34:24 GMT 2007


No, you cannot use global pointers. 

Although those pointers are valid throughout the life of the pcap handle (valid in the sense that they point to a valid memory location), as soon as your pcap_loop callback function returns, the contents of such memory are overwritten. 

The *ONLY* way to preserve a packet passed to the pcap_loop callback is to copy the packet into some memory buffer allocated by your application.

Have a nice day
GV

  ----- Original Message ----- 
  From: ceo at triplebit.com 
  To: Gianluca Varenni ; winpcap-users at winpcap.org 
  Sent: Tuesday, September 11, 2007 9:07 AM
  Subject: Re: [Winpcap-users] pcap_loop pointers


  Thanks GV,
  I experimented a little and saw that if I assign global pointers with the outcome pointers values from the function, they sustain to point to the original pointers data even if I leave the function.
  Does that make sense with your reply?
  Can I use these global pointers values after returning from the function? 
  Regards

  I. Lesher
    ----- Original Message ----- 
    From: Gianluca Varenni 
    To: ceo at triplebit.com ; winpcap-users at winpcap.org 
    Sent: Tuesday, September 11, 2007 8:34 AM
    Subject: Re: [Winpcap-users] pcap_loop pointers



      ----- Original Message ----- 
      From: ceo at triplebit.com 
      To: winpcap-users at winpcap.org 
      Sent: Monday, September 10, 2007 6:13 AM
      Subject: [Winpcap-users] pcap_loop pointers


      I think that my question represents also other users.
      When using the function "pcap_loop"  the system uses the fallowing callback
      whenever a packet arrives -

            typedef void(* pcap_handler)(u_char *user, const struct pcap_pkthdr
      *pkt_header, const u_char *pkt_data)


      My questions-

      1. I saw that the pointers pkt_data and pkt_header differ from packet to
      packet.
      Does that mean that the data on which they point occupies different area in
      memory?

    Yes.

      2. How do I know if the data pointed by them is still valid in a certain
      moment?

    Those pointers are valid *only* in the context of the pcap_handler callback. Packets are reused as soon as the pcap_handler callback returns.

    Have a nice day
    GV


      Regards

      I. Lesher




--------------------------------------------------------------------------


      _______________________________________________
      Winpcap-users mailing list
      Winpcap-users at winpcap.org
      https://www.winpcap.org/mailman/listinfo/winpcap-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.winpcap.org/pipermail/winpcap-users/attachments/20070918/fe9043a7/attachment.htm


More information about the Winpcap-users mailing list