fix: do not hammer dns servers re-requesting udp trackernames (#2641)

Fixes #1815.
This commit is contained in:
Charles Kerr 2022-02-17 18:38:11 -06:00 committed by GitHub
parent 29af76d977
commit 17cb155451
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 1 deletions

View File

@ -457,6 +457,7 @@ static void tau_tracker_on_dns(int errcode, struct evutil_addrinfo* addr, void*
auto* tracker = static_cast<struct tau_tracker*>(vtracker);
tracker->dns_request = nullptr;
tracker->addr_expiration_time = tr_time() + 60 * 60; /* one hour */
if (errcode != 0)
{
@ -468,7 +469,6 @@ static void tau_tracker_on_dns(int errcode, struct evutil_addrinfo* addr, void*
{
dbgmsg(tracker->key, "DNS lookup succeeded");
tracker->addr = addr;
tracker->addr_expiration_time = tr_time() + 60 * 60; /* one hour */
tau_tracker_upkeep(tracker);
}
}
@ -610,6 +610,7 @@ static void tau_tracker_upkeep_ex(struct tau_tracker* tracker, bool timeout_reqs
dbgmsg(tracker->host, "Expiring old DNS result");
evutil_freeaddrinfo(tracker->addr);
tracker->addr = nullptr;
tracker->addr_expiration_time = 0;
}
/* are there any requests pending? */
@ -618,6 +619,12 @@ static void tau_tracker_upkeep_ex(struct tau_tracker* tracker, bool timeout_reqs
return;
}
// if DNS lookup *recently* failed for this host, do nothing
if (tracker->addr == nullptr && now < tracker->addr_expiration_time)
{
return;
}
/* if we don't have an address yet, try & get one now. */
if (!closing && tracker->addr == nullptr && tracker->dns_request == nullptr)
{