diff options
author | Ingo van Lil <inguin@gmx.de> | 2010-07-28 14:52:08 +0200 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2010-07-28 15:36:03 +0200 |
commit | 05ef2d67dcfca516e49e133d9f7e3c62feed2358 (patch) | |
tree | 69d4592030fa83b8ae992a51c777fe97738cc379 | |
parent | cafbb2a0a0ac469393dc3192ba67ffbe1ddb5d4e (diff) |
Immediately try next nameserver on recv() failure
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>
-rw-r--r-- | libc/inet/resolv.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c index 320aec4f5..6a9b80791 100644 --- a/libc/inet/resolv.c +++ b/libc/inet/resolv.c @@ -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; } |