From: Niels Provos Date: Mon, 28 May 2007 21:17:35 +0000 (+0000) Subject: treat SERVERFAILED as a timeout; from tor cvs via Nick Mathewson X-Git-Tag: release-2.0.1-alpha~622 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=28246587c0520a9e812fc6ed64b3d7c173864789;p=libevent treat SERVERFAILED as a timeout; from tor cvs via Nick Mathewson svn:r359 --- diff --git a/evdns.c b/evdns.c index f66239bb..82b45a7f 100644 --- a/evdns.c +++ b/evdns.c @@ -698,7 +698,6 @@ reply_handle(struct request *const req, u16 flags, u32 ttl, struct reply *reply) } switch(error) { - case DNS_ERR_SERVERFAILED: case DNS_ERR_NOTIMPL: case DNS_ERR_REFUSED: // we regard these errors as marking a bad nameserver @@ -710,6 +709,14 @@ reply_handle(struct request *const req, u16 flags, u32 ttl, struct reply *reply) if (!request_reissue(req)) return; } break; + case DNS_ERR_SERVERFAILED: + // rcode 2 (servfailed) sometimes means "we are broken" and + // sometimes (with some binds) means "that request was very + // confusing." Treat this as a timeout, not a failure. + log(EVDNS_LOG_DEBUG, "Got a SERVERFAILED from nameserver %s; " + "will allow the request to time out.", + debug_ntoa(req->ns->address)); + break; default: // we got a good reply from the nameserver nameserver_up(req->ns);