#undef PREFIX
#define DEFAULT_TIMEOUT 400
+#define MAX_TIMEOUT 10000
+
const struct rtt_state default_rtt_state = {0, DEFAULT_TIMEOUT/4, 0};
struct rtt_state get_rtt_state(const uint8_t *ip, size_t len, struct kr_cache *cache) {
// This is verbatim (minus the default timeout value and minimal variance) RFC2988, sec. 2
int32_t calc_timeout(struct rtt_state state) {
int32_t timeout = state.srtt + MAX(4 * state.variance, MINIMAL_TIMEOUT_ADDITION);
- return timeout * (1 << state.consecutive_timeouts);
+ timeout = timeout * (1 << state.consecutive_timeouts);
+ if (timeout > MAX_TIMEOUT) {
+ return MAX_TIMEOUT;
+ }
+ return timeout;
}
// This is verbatim RFC2988, sec. 2
end
resolve(qname, qtype, kres.class.IN, {}, callback)
- for delay = 0.1, 4, 0.5 do -- total max 14.9s in 8 steps
+ for delay = 0.1, 5, 0.5 do -- total max 23.5s in 9 steps
if done then return end
worker.sleep(delay)
end