diff --git a/node/Constants.hpp b/node/Constants.hpp index 3bda3805b..c2961f122 100644 --- a/node/Constants.hpp +++ b/node/Constants.hpp @@ -202,7 +202,7 @@ /** * Maximum identity WHOIS retries (each attempt tries consulting a different peer) */ -#define ZT_MAX_WHOIS_RETRIES 3 +#define ZT_MAX_WHOIS_RETRIES 4 /** * Transmit queue entry timeout @@ -390,6 +390,11 @@ */ #define ZT_PEER_CREDEITIALS_CUTOFF_LIMIT 15 +/** + * WHOIS rate limit (we allow these to be pretty fast) + */ +#define ZT_PEER_WHOIS_RATE_LIMIT 50 + /** * General rate limit for other kinds of rate-limited packets (HELLO, credential request, etc.) both inbound and outbound */ diff --git a/node/Peer.hpp b/node/Peer.hpp index 783f48b8f..72040b1d0 100644 --- a/node/Peer.hpp +++ b/node/Peer.hpp @@ -370,7 +370,7 @@ public: */ inline bool rateGateInboundWhoisRequest(const uint64_t now) { - if ((now - _lastWhoisRequestReceived) >= ZT_PEER_GENERAL_RATE_LIMIT) { + if ((now - _lastWhoisRequestReceived) >= ZT_PEER_WHOIS_RATE_LIMIT) { _lastWhoisRequestReceived = now; return true; } diff --git a/node/Switch.cpp b/node/Switch.cpp index 0392aec10..85103aa59 100644 --- a/node/Switch.cpp +++ b/node/Switch.cpp @@ -688,9 +688,9 @@ unsigned long Switch::doTimerTasks(uint64_t now) _outstandingWhoisRequests.erase(*a); } else { r->lastSent = now; - r->peersConsulted[r->retries] = _sendWhoisRequest(*a,r->peersConsulted,r->retries); - ++r->retries; + r->peersConsulted[r->retries] = _sendWhoisRequest(*a,r->peersConsulted,(r->retries > 1) ? r->retries : 0); TRACE("WHOIS %s (retry %u)",a->toString().c_str(),r->retries); + ++r->retries; nextDelay = std::min(nextDelay,(unsigned long)ZT_WHOIS_RETRY_DELAY); } } else {