X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=udp_recv.c;h=059561424efb30487511a4cbbca70805be3d6247;hb=ee981891841937c911739c7f99ee1a2a6782f649;hp=c768d3243ead5fa5e8be4c68ba276cc2193a7a49;hpb=4c831a0fd51a9ce4d0cca0061696d62a694815b5;p=paraslash.git diff --git a/udp_recv.c b/udp_recv.c index c768d324..05956142 100644 --- a/udp_recv.c +++ b/udp_recv.c @@ -84,6 +84,9 @@ static void udp_recv_post_select(__a_unused struct sched *s, struct task *t) if (iovcnt == 0) goto err; ret = para_readv(purd->fd, iov, iovcnt); + /* EAGAIN is possible even if FD_ISSET */ + if (ret < 0 && is_errno(-ret, EAGAIN)) + return; if (ret == 0) ret = -E_RECV_EOF; if (ret < 0) @@ -209,7 +212,7 @@ static int udp_recv_open(struct receiver_node *rn) ret = mcast_receiver_setup(purd->fd, iface); if (ret < 0) { close(purd->fd); - return ret; + goto err; } ret = mark_fd_nonblocking(purd->fd);