X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-core%2Fsocket.c;h=e69ec7d42a7d1f947d1c7f3988e443dd68255873;hb=e80dfc163e06f9bd9300d096f384bf418ac3062f;hp=4146d5ad593e5d3d05dc8265192a147c539f390f;hpb=aec83994fea80aec0965bc9ecc95fe0139be3160;p=catta diff --git a/avahi-core/socket.c b/avahi-core/socket.c index 4146d5a..e69ec7d 100644 --- a/avahi-core/socket.c +++ b/avahi-core/socket.c @@ -1,5 +1,3 @@ -/* $Id$ */ - /*** This file is part of avahi. @@ -450,6 +448,9 @@ static int sendmsg_loop(int fd, struct msghdr *msg, int flags) { if (sendmsg(fd, msg, flags) >= 0) break; + if (errno == EINTR) + continue; + if (errno != EAGAIN) { char where[64]; struct sockaddr_in *sin = msg->msg_name; @@ -678,10 +679,14 @@ AvahiDnsPacket *avahi_recv_dns_packet_ipv4( goto fail; } - if (sa.sin_addr.s_addr == INADDR_ANY) { + /* For corrupt packets FIONREAD returns zero size (See rhbz #607297). So + * fail after having read them. */ + if (!ms) + goto fail; + + if (sa.sin_addr.s_addr == INADDR_ANY) /* Linux 2.4 behaves very strangely sometimes! */ goto fail; - } assert(!(msg.msg_flags & MSG_CTRUNC)); assert(!(msg.msg_flags & MSG_TRUNC)); @@ -832,6 +837,11 @@ AvahiDnsPacket *avahi_recv_dns_packet_ipv6( goto fail; } + /* For corrupt packets FIONREAD returns zero size (See rhbz #607297). So + * fail after having read them. */ + if (!ms) + goto fail; + assert(!(msg.msg_flags & MSG_CTRUNC)); assert(!(msg.msg_flags & MSG_TRUNC));