]> granicus.if.org Git - libevent/commitdiff
From Nick Mathewson:
authorNiels Provos <provos@gmail.com>
Tue, 12 Dec 2006 04:02:07 +0000 (04:02 +0000)
committerNiels Provos <provos@gmail.com>
Tue, 12 Dec 2006 04:02:07 +0000 (04:02 +0000)
This patch resets the successive timeout count to zero when:
  - A nameserver comes up
  - We receive a reply from a nameserver
  - We decide to not use the nameserver for a while because of its
    timeout count.

This patch also changes the timeout threshold from 3 to 5 seconds.

svn:r303

evdns.c

diff --git a/evdns.c b/evdns.c
index b61d0f2f0dec52a1ae46f6ee73571b01fda55e7d..9d33f489adfda6aa82e47a1af0efcffbdf48045a 100644 (file)
--- a/evdns.c
+++ b/evdns.c
@@ -212,7 +212,7 @@ static int global_requests_waiting = 0;
 
 static int global_max_requests_inflight = 64;
 
-static struct timeval global_timeout = {3, 0};  // 3 seconds
+static struct timeval global_timeout = {5, 0};  // 5 seconds
 static int global_max_reissues = 1;  // a reissue occurs when we get some errors from the server
 static int global_max_retransmits = 3;  // number of times we'll retransmit a request which timed out
 // number of timeouts in a row before we consider this server to be down
@@ -447,6 +447,7 @@ nameserver_up(struct nameserver *const ns) {
        evtimer_del(&ns->timeout_event);
        ns->state = 1;
        ns->failed_times = 0;
+       ns->timedout = 0;
        global_good_nameservers++;
 }
 
@@ -891,6 +892,7 @@ nameserver_read(struct nameserver *ns) {
                        nameserver_failed(ns, strerror(err));
                        return;
                }
+               ns->timedout = 0;
                reply_parse(packet, r);
        }
 }
@@ -1051,6 +1053,7 @@ evdns_request_timeout_callback(int fd, short events, void *arg) {
 
        req->ns->timedout++;
        if (req->ns->timedout > global_max_nameserver_timeout) {
+               req->ns->timedout = 0;
                nameserver_failed(req->ns, "request timed out.");
        }