]> git.hungrycats.org Git - linux/commitdiff
[IPV4]: Do not return -EAGAIN on blocking UDP socket, noticed by Olaf Kirch.
authorDavid S. Miller <davem@nuts.davemloft.net>
Sat, 21 Feb 2004 05:10:51 +0000 (21:10 -0800)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Sat, 21 Feb 2004 05:10:51 +0000 (21:10 -0800)
net/ipv4/udp.c

index cea7b9ab8e1105eb92b2051070316da6c7c15127..4a097086cbdd2bf2db55c0431ae40bec2c43f6d2 100644 (file)
@@ -787,6 +787,7 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
        if (flags & MSG_ERRQUEUE)
                return ip_recv_error(sk, msg, len);
 
+try_again:
        skb = skb_recv_datagram(sk, flags, noblock, &err);
        if (!skb)
                goto out;
@@ -852,7 +853,9 @@ csum_copy_err:
 
        skb_free_datagram(sk, skb);
 
-       return -EAGAIN; 
+       if (noblock)
+               return -EAGAIN; 
+       goto try_again;
 }
 
 int udp_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)