diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | src/or/eventdns.c | 12 |
2 files changed, 9 insertions, 6 deletions
@@ -16,6 +16,9 @@ Changes in version 0.2.1.13-????? - 2009-0?-?? logs. Bugfix on 0.2.1.8-alpha. - Clients no longer cache certificates for authorities they do not recognize. Bugfix on 0.2.0.9-alpha. + - When we can't transmit a DNS request due to a network error, retry + it after a while, and eventually transmit a failing response to the + RESOLVED cell. Bugfix on 0.1.2.5-alpha. o Minor features: - On Linux, use the prctl call to re-enable core dumps when the user diff --git a/src/or/eventdns.c b/src/or/eventdns.c index 5638d2d4a6..12a291d1b8 100644 --- a/src/or/eventdns.c +++ b/src/or/eventdns.c @@ -2046,9 +2046,10 @@ evdns_request_transmit(struct evdns_request *req) { nameserver_write_waiting(req->ns, 1); return 1; case 2: - /* failed in some other way */ + /* failed to transmit the request entirely. */ retcode = 1; - break; + /* fall through: we'll set a timeout, which will time out, + * and make us retransmit the request anyway. */ default: /* transmitted; we need to check for timeout. */ log(EVDNS_LOG_DEBUG, @@ -2060,11 +2061,10 @@ evdns_request_transmit(struct evdns_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 |