]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix to omit UDP receive errors from log, if verbosity low.
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Thu, 26 Nov 2020 08:39:54 +0000 (09:39 +0100)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Thu, 26 Nov 2020 08:39:54 +0000 (09:39 +0100)
  These happen because of udp-connect.

doc/Changelog
util/netevent.c

index 506aed34bdf289546b0ba59f8717d58561238747..9e692896393b4c18df2b2edb0f5b68f15f4feeb7 100644 (file)
@@ -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.
index 6bb51cc0736daacfc55b94f2003088ceb6a4bfb8..7147673244766491c6b7e095198621231302637d 100644 (file)
@@ -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