summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-12-31 17:33:57 +0000
committerLennart Poettering <lennart@poettering.net>2006-12-31 17:33:57 +0000
commitc3ed8d543014877ec1a5cd2ab0fbef79c03c0467 (patch)
tree77ab48ca0aeb3efcb06c3efd6166ca656ed44bdf
parenta66c19d9111dc950aac47b7becaddf1b0814f251 (diff)
Ignore EAGAIN errors on recvmsg() (Closes #60)
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@1361 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
-rw-r--r--avahi-core/socket.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/avahi-core/socket.c b/avahi-core/socket.c
index 9291f08..9ca1437 100644
--- a/avahi-core/socket.c
+++ b/avahi-core/socket.c
@@ -635,6 +635,9 @@ AvahiDnsPacket *avahi_recv_dns_packet_ipv4(int fd, AvahiIPv4Address *ret_src_add
goto fail;
}
+ if (ms <= 0)
+ goto fail;
+
p = avahi_dns_packet_new(ms + AVAHI_DNS_PACKET_EXTRA_SIZE);
io.iov_base = AVAHI_DNS_PACKET_DATA(p);
@@ -650,7 +653,14 @@ AvahiDnsPacket *avahi_recv_dns_packet_ipv4(int fd, AvahiIPv4Address *ret_src_add
msg.msg_flags = 0;
if ((l = recvmsg(fd, &msg, 0)) < 0) {
- avahi_log_warn("recvmsg(): %s", strerror(errno));
+ /* Linux returns EAGAIN when an invalid IP packet has been
+ recieved. We suppress warnings in this case because this might
+ create quite a bit of log traffic on machines with unstable
+ links. (See #60) */
+
+ if (errno != EAGAIN)
+ avahi_log_warn("recvmsg(): %s", strerror(errno));
+
goto fail;
}
@@ -768,6 +778,9 @@ AvahiDnsPacket *avahi_recv_dns_packet_ipv6(int fd, AvahiIPv6Address *ret_src_add
avahi_log_warn("ioctl(): %s", strerror(errno));
goto fail;
}
+
+ if (ms <= 0)
+ goto fail;
p = avahi_dns_packet_new(ms + AVAHI_DNS_PACKET_EXTRA_SIZE);
@@ -785,7 +798,14 @@ AvahiDnsPacket *avahi_recv_dns_packet_ipv6(int fd, AvahiIPv6Address *ret_src_add
msg.msg_flags = 0;
if ((l = recvmsg(fd, &msg, 0)) < 0) {
- avahi_log_warn("recvmsg(): %s", strerror(errno));
+ /* Linux returns EAGAIN when an invalid IP packet has been
+ recieved. We suppress warnings in this case because this might
+ create quite a bit of log traffic on machines with unstable
+ links. (See #60) */
+
+ if (errno != EAGAIN)
+ avahi_log_warn("recvmsg(): %s", strerror(errno));
+
goto fail;
}