From 05ef2d67dcfca516e49e133d9f7e3c62feed2358 Mon Sep 17 00:00:00 2001 From: Ingo van Lil Date: Wed, 28 Jul 2010 14:52:08 +0200 Subject: 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 Acked-by: Roman I Khimov Signed-off-by: Bernhard Reutner-Fischer --- libc/inet/resolv.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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; } -- cgit v1.2.3