REQUIRE(cb != 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));
}
request->cb = cb;
request->arg = arg;
request->result = ISC_R_FAILURE;
- request->udpcount = udpretries;
+ request->udpcount = udpretries + 1;
isc_buffer_usedregion(msgbuf, &r);
if (r.length < DNS_MESSAGE_HEADERLEN || r.length > 65535) {
request->timeout = timeout * 1000;
} else {
if (udptimeout == 0) {
- udptimeout = timeout / (udpretries + 1);
+ udptimeout = timeout / request->udpcount;
}
if (udptimeout == 0) {
udptimeout = 1;
REQUIRE(cb != NULL);
REQUIRE(requestp != NULL && *requestp == NULL);
REQUIRE(timeout > 0);
+ REQUIRE(udpretries != UINT_MAX);
mctx = requestmgr->mctx;
request->cb = cb;
request->arg = arg;
request->result = ISC_R_FAILURE;
- request->udpcount = udpretries;
-
- request->udpcount = udpretries;
+ request->udpcount = udpretries + 1;
if (key != NULL) {
dns_tsigkey_attach(key, &request->tsigkey);
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);