From 4a8669612a6761e05d2776edc198dbd71c3b673b Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Thu, 26 Nov 2020 09:39:54 +0100 Subject: [PATCH] - Fix to omit UDP receive errors from log, if verbosity low. These happen because of udp-connect. --- doc/Changelog | 4 ++++ util/netevent.c | 31 +++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/doc/Changelog b/doc/Changelog index 506aed34b..9e6928963 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +26 November 2020: Wouter + - Fix to omit UDP receive errors from log, if verbosity low. + These happen because of udp-connect. + 25 November 2020: Wouter - with udp-connect ignore connection refused with UDP timeouts. - Fix udp-connect on FreeBSD, do send calls on connected UDP socket. diff --git a/util/netevent.c b/util/netevent.c index 6bb51cc07..714767324 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -579,6 +579,32 @@ comm_point_send_udp_msg_if(struct comm_point *c, sldns_buffer* packet, #endif /* AF_INET6 && IPV6_PKTINFO && HAVE_SENDMSG */ } +/** return true is UDP receive error needs to be logged */ +static int udp_recv_needs_log(int err) +{ + switch(err) { + case ECONNREFUSED: +# ifdef ENETUNREACH + case ENETUNREACH: +# endif +# ifdef EHOSTDOWN + case EHOSTDOWN: +# endif +# ifdef EHOSTUNREACH + case EHOSTUNREACH: +# endif +# ifdef ENETDOWN + case ENETDOWN: +# endif + if(verbosity >= VERB_ALGO) + return 1; + return 0; + default: + break; + } + return 1; +} + void comm_point_udp_ancil_callback(int fd, short event, void* arg) { @@ -621,7 +647,8 @@ comm_point_udp_ancil_callback(int fd, short event, void* arg) msg.msg_flags = 0; rcv = recvmsg(fd, &msg, 0); if(rcv == -1) { - if(errno != EAGAIN && errno != EINTR) { + if(errno != EAGAIN && errno != EINTR + && udp_recv_needs_log(errno)) { log_err("recvmsg failed: %s", strerror(errno)); } return; @@ -703,7 +730,7 @@ comm_point_udp_callback(int fd, short event, void* arg) if(rcv == -1) { #ifndef USE_WINSOCK if(errno != EAGAIN && errno != EINTR - && errno != ECONNREFUSED) + && udp_recv_needs_log(errno)) log_err("recvfrom %d failed: %s", fd, strerror(errno)); #else