Provided by: linux-doc-2.6.15_2.6.15-23.39_all bug


       skb_recv_datagram - Receive a datagram skbuff


       struct sk_buff * skb_recv_datagram  (struct sock * sk, unsigned flags,
                                               int noblock, int * err);


       sk     socket

       flags  MSG_ flags

              blocking operation?

       err    error code returned


       Get a datagram skbuff, understands the peeking, nonblocking wakeups and
       possible races. This replaces identical code in packet, raw and udp, as
       well as the IPX AX.25 and Appletalk. It also  finally  fixes  the  long
       standing  peek  and  read  race for datagram sockets. If you alter this
       routine remember it must be re-entrant.

       This function will lock the socket if a skb is returned, so the  caller
       needs   to   unlock  the  socket  in  that  case  (usually  by  calling

       * It does not lock socket since today. This function is * free of  race
       conditions.  This  measure  should/can improve * significantly datagram
       socket latencies at high loads, * when data copying to user space takes
       lots   of   time.   *   (BTW   I’ve   just   killed  the  last  cli  in
       IP/IPv6/core/netlink/packet * 8) Great win.) * --ANK (980729)

       The order of the tests when we find no data waiting are specified quite
       explicitly  by  POSIX  1003.1g,  don’t  change  them without having the
       standard around please.