Commit 35d8fb05 authored by Phil Blundell's avatar Phil Blundell
Browse files

- ares__send_query() now varies the retry timeout pseudo-randomly to avoid

  packet storms when several queries were started at the same time.
parent 87c71953
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
  Changelog for the c-ares project

* January 11 2008 (Daniel Stenberg)
* January 13 2009 (Phil Blundell)
- ares__send_query() now varies the retry timeout pseudo-randomly to avoid
  packet storms when several queries were started at the same time.

* January 11 2009 (Daniel Stenberg)
- Phil Blundell added the internal function ares__expand_name_for_response()
  that is now used by the ares_parse_*_reply() functions instead of the
  ares_expand_name() simply to easier return ARES_EBADRESP for the cases where
+4 −1
Original line number Diff line number Diff line
@@ -715,6 +715,7 @@ void ares__send_query(ares_channel channel, struct query *query,
{
  struct send_request *sendreq;
  struct server_state *server;
  int timeplus;

  server = &channel->servers[query->server];
  if (query->using_tcp)
@@ -778,9 +779,11 @@ void ares__send_query(ares_channel channel, struct query *query,
          return;
        }
    }
    timeplus = channel->timeout << (query->try / channel->nservers);
    timeplus = (timeplus * (9 + (rand () & 7))) / 16;
    query->timeout = *now;
    ares__timeadd(&query->timeout,
                  channel->timeout << (query->try / channel->nservers));
                  timeplus);
    /* Keep track of queries bucketed by timeout, so we can process
     * timeout events quickly.
     */