]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Elusive bad-file-descriptor error caught.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Wed, 5 Nov 2008 14:56:49 +0000 (14:56 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Wed, 5 Nov 2008 14:56:49 +0000 (14:56 +0000)
git-svn-id: file:///svn/unbound/trunk@1333 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
services/outside_network.c
util/netevent.c

index a8c12598078215729827cf4f8a21bfb828e03ef4..48585cbe99e2452e1f405f6267ad0e7782f39b91 100644 (file)
@@ -9,6 +9,10 @@
        - fixed file descriptor leak for localzone type deny (for TCP).
        - fixed memleak at exit for nsec3 negative cached zones.
        - fixed memleak for the keyword 'nodefault' when reading config.
+       - made verbosity of 'edns incapable peer' warning higher, so you
+         do not get spammed by it.
+       - caught elusive Bad file descriptor error bug, that would print the
+         error while unnecessarily try to listen to a closed fd. Fixed.
 
 4 November 2008: Wouter
        - fixed -Wwrite-strings warnings that result in better code.
index f7413f3b73d2344e8ba3e98dd85219386e510494..4d627914504b79f44c634554970577c925a0e5d9 100644 (file)
@@ -1490,7 +1490,7 @@ serviced_udp_callback(struct comm_point* c, void* arg, int error,
        if(sq->status == serviced_query_PROBE_EDNS) {
                /* probe without EDNS succeeds, so we conclude that this
                 * host likely has EDNS packets dropped */
-               log_addr(VERB_OPS, "timeouts, concluded that connection to "
+               log_addr(VERB_DETAIL, "timeouts, concluded that connection to "
                        "host drops EDNS packets", &sq->addr, sq->addrlen);
                if(!infra_edns_update(outnet->infra, &sq->addr, sq->addrlen,
                        -1, (uint32_t)now.tv_sec)) {
index 6d1726acbe7e8d6334f699eac726ba7c73774d77..edbd1448450823fe7da2b58c04433837be6e50e5 100644 (file)
@@ -503,7 +503,8 @@ comm_point_udp_callback(int fd, short event, void* arg)
                if(recv == -1) {
 #ifndef USE_WINSOCK
                        if(errno != EAGAIN && errno != EINTR)
-                               log_err("recvfrom failed: %s", strerror(errno));
+                               log_err("recvfrom %d failed: %s", 
+                                       fd, strerror(errno));
 #else
                        if(WSAGetLastError() != WSAEINPROGRESS &&
                                WSAGetLastError() != WSAECONNRESET &&
@@ -522,7 +523,8 @@ comm_point_udp_callback(int fd, short event, void* arg)
                        (void)comm_point_send_udp_msg(rep.c, rep.c->buffer,
                                (struct sockaddr*)&rep.addr, rep.addrlen);
                }
-               if(rep.c->fd == -1) /* commpoint closed */
+               if(rep.c->fd != fd) /* commpoint closed to -1 or reused for
+               another UDP port. Note rep.c cannot be reused with TCP fd. */
                        break;
        }
 }