????sock_queu_rcv_skb()????????????£?


/*
 * Queue a received datagram if it will fit. Stream and sequenced protocols
 * can't normally use this as they need to fit buffers in and play with them.
 */

int sock_queue_rcv_skb(struct sock *sk?? struct sk_buff *skb)
{
 unsigned long flags;
 if(sk->rmem_alloc + skb->mem_len >= sk->rcvbuf)
  return -ENOMEM;
 save_flags(flags);
 cli();
 sk->rmem_alloc+=skb->mem_len;
 skb->sk=sk;
 restore_flags(flags);
 skb_queue_tail(&sk->receive_queue??skb);
 if(!sk->dead)
  sk->data_ready(sk??skb->len);
 return 0;
}
 


????????????????????????????????????????????????????????????μ????????

????????????http://blog.csdn.net/yming0221/article/details/7492423