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

NAME

       skb_recv_datagram - Receive a datagram skbuff

SYNOPSIS

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

ARGUMENTS

       sk     socket

       flags  MSG_ flags

       noblock
              blocking operation?

       err    error code returned

DESCRIPTION

       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
       skb_free_datagram)

       * 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.