From 3008c3b768f2cb8ab735e8ebbda2d4322910b19e Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 28 Feb 2007 20:24:23 +0000 Subject: r12000@catbus: nickm | 2007-02-28 15:12:21 -0500 Try to fix eventdns bug 326 again, this time by noting that rcode 2 (serverfailed) does not really mean "The server is useless." svn:r9687 --- src/or/eventdns.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/or/eventdns.c b/src/or/eventdns.c index bb97c31c74..7270df5052 100644 --- a/src/or/eventdns.c +++ b/src/or/eventdns.c @@ -696,7 +696,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 @@ -708,6 +707,15 @@ 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. + /*XXXX refactor the parts of */ + log(EVDNS_LOG_DEBUG, "Got a SERVERFAILED from nameserver %s; " + "will allow the request to time out.", + debug_nota(req->ns->address)); + break; default: // we got a good reply from the nameserver nameserver_up(req->ns); @@ -1876,9 +1884,9 @@ evdns_request_transmit(struct request *req) { case 2: // failed in some other way retcode = 1; - // fall through + break; default: - // all ok + // transmitted; we need to check for timeout. log(EVDNS_LOG_DEBUG, "Setting timeout for request %lx", (unsigned long) req); evtimer_set(&req->timeout_event, evdns_request_timeout_callback, req); @@ -1888,10 +1896,11 @@ evdns_request_transmit(struct request *req) { (unsigned long) req); // ???? Do more? } - req->tx_count++; - req->transmit_me = 0; - return retcode; } + + req->tx_count++; + req->transmit_me = 0; + return retcode; } static void -- cgit v1.2.3-54-g00ecf