OSDN Git Service

Immediately try next nameserver on recv() failure
authorIngo van Lil <inguin@gmx.de>
Wed, 28 Jul 2010 12:52:08 +0000 (14:52 +0200)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Wed, 28 Jul 2010 13:36:03 +0000 (15:36 +0200)
If there is a problem communicating with a nameserver the __dns_lookup()
function will not immediately advance to the next nameserver but instead
continue waiting until the timeout expires. This will cause a 30 second
delay even if no nameserver is configured in resolv.conf and no DNS is
running on localhost.

Signed-off-by: Ingo van Lil <inguin@gmx.de>
Acked-by: Roman I Khimov <khimov@altell.ru>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
libc/inet/resolv.c

index 320aec4..6a9b807 100644 (file)
@@ -1432,9 +1432,11 @@ int attribute_hidden __dns_lookup(const char *name,
 
                if (packet_len < HFIXEDSZ) {
                        /* too short!
+                        * If the peer did shutdown then retry later,
+                        * try next peer on error.
                         * it's just a bogus packet from somewhere */
  bogus_packet:
-                       if (reply_timeout)
+                       if (packet_len >= 0 && reply_timeout)
                                goto wait_again;
                        goto try_next_server;
                }