From 28246587c0520a9e812fc6ed64b3d7c173864789 Mon Sep 17 00:00:00 2001 From: Niels Provos Date: Mon, 28 May 2007 21:17:35 +0000 Subject: [PATCH] treat SERVERFAILED as a timeout; from tor cvs via Nick Mathewson svn:r359 --- evdns.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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);