REQUIRE(action != NULL);
REQUIRE(requestp != NULL && *requestp == NULL);
REQUIRE(timeout > 0);
+ REQUIRE(udpretries != UINT_MAX);
+
if (srcaddr != NULL) {
REQUIRE(isc_sockaddr_pf(srcaddr) == isc_sockaddr_pf(destaddr));
}
return (result);
}
- request->udpcount = udpretries;
+ request->udpcount = udpretries + 1;
request->event = (dns_requestevent_t *)isc_event_allocate(
mctx, task, DNS_EVENT_REQUESTDONE, action, arg,
request->timeout = timeout * 1000;
} else {
if (udptimeout == 0) {
- udptimeout = timeout / (udpretries + 1);
+ udptimeout = timeout / request->udpcount;
}
if (udptimeout == 0) {
udptimeout = 1;
REQUIRE(action != NULL);
REQUIRE(requestp != NULL && *requestp == NULL);
REQUIRE(timeout > 0);
+ REQUIRE(udpretries != UINT_MAX);
mctx = requestmgr->mctx;
return (result);
}
- request->udpcount = udpretries;
+ request->udpcount = udpretries + 1;
request->event = (dns_requestevent_t *)isc_event_allocate(
mctx, task, DNS_EVENT_REQUESTDONE, action, arg,
tcp = true;
request->timeout = timeout * 1000;
} else {
- if (udptimeout == 0 && udpretries != 0) {
- udptimeout = timeout / (udpretries + 1);
+ if (udptimeout == 0) {
+ udptimeout = timeout / request->udpcount;
}
if (udptimeout == 0) {
udptimeout = 1;
if (result == ISC_R_TIMEDOUT) {
LOCK(&request->requestmgr->locks[request->hash]);
- if (request->udpcount != 0) {
+ if (request->udpcount > 1) {
request->udpcount -= 1;
dns_dispatch_resume(request->dispentry,
request->timeout);