if (query->lookup->tls_mode) {
result = isc_tlsctx_createclient(&query->tlsctx);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
- result = isc_nm_tlsdnsconnect(
- netmgr, (isc_nmiface_t *)&localaddr,
- (isc_nmiface_t *)&query->sockaddr,
- tcp_connected, query, local_timeout, 0,
- query->tlsctx);
- check_result(result, "isc_nm_tlsdnsconnect");
+ isc_nm_tlsdnsconnect(netmgr,
+ (isc_nmiface_t *)&localaddr,
+ (isc_nmiface_t *)&query->sockaddr,
+ tcp_connected, query,
+ local_timeout, 0, query->tlsctx);
} else if (query->lookup->https_mode) {
char uri[4096] = { 0 };
snprintf(uri, sizeof(uri), "https://%s:%u%s",
query->tlsctx);
}
- result = isc_nm_httpconnect(
- netmgr, (isc_nmiface_t *)&localaddr,
- (isc_nmiface_t *)&query->sockaddr, uri,
- !query->lookup->https_get, tcp_connected, query,
- query->tlsctx, local_timeout, 0);
- check_result(result, "isc_nm_httpconnect");
+ isc_nm_httpconnect(netmgr, (isc_nmiface_t *)&localaddr,
+ (isc_nmiface_t *)&query->sockaddr,
+ uri, !query->lookup->https_get,
+ tcp_connected, query, query->tlsctx,
+ local_timeout, 0);
} else {
- result = isc_nm_tcpdnsconnect(
+ isc_nm_tcpdnsconnect(
netmgr, (isc_nmiface_t *)&localaddr,
(isc_nmiface_t *)&query->sockaddr,
tcp_connected, query, local_timeout, 0);
- check_result(result, "isc_nm_tcpdnsconnect");
}
/* XXX: set DSCP */
debug("udp setup failed: %s",
isc_result_totext(eresult));
}
- if (query->tries == 0) {
- query_detach(&query);
- }
+ query_detach(&query);
return;
}
}
}
- query->tries = 3;
- do {
- int local_timeout = timeout * 1000;
- if (local_timeout == 0) {
- local_timeout = UDP_TIMEOUT * 1000;
- }
-
- /*
- * On FreeBSD the UDP connect() call sometimes results
- * in a spurious transient EADDRINUSE. Try a few more times
- * before giving up.
- */
- debug("isc_nm_udpconnect(): %d tries left", --query->tries);
- result = isc_nm_udpconnect(netmgr, (isc_nmiface_t *)&localaddr,
- (isc_nmiface_t *)&query->sockaddr,
- udp_ready, query, local_timeout, 0);
- } while (result != ISC_R_SUCCESS && query->tries > 0);
- check_result(result, "isc_nm_udpconnect");
+ isc_nm_udpconnect(netmgr, (isc_nmiface_t *)&localaddr,
+ (isc_nmiface_t *)&query->sockaddr, udp_ready, query,
+ (timeout ? timeout : UDP_TIMEOUT) * 1000, 0);
}
/*%
isc__networker_t *worker = NULL;
int uv_bind_flags = UV_UDP_REUSEADDR;
isc_result_t result = ISC_R_DEFAULT;
+ int tries = 3;
int r;
REQUIRE(isc__nm_in_netthread());
&(int){ ISC_SEND_BUFFER_SIZE });
#endif
- r = isc_uv_udp_connect(&sock->uv_handle.udp, &req->peer.type.sa);
+ /*
+ * On FreeBSD the UDP connect() call sometimes results in a
+ * spurious transient EADDRINUSE. Try a few more times before
+ * giving up.
+ */
+ do {
+ r = isc_uv_udp_connect(&sock->uv_handle.udp,
+ &req->peer.type.sa);
+ } while (r == UV_EADDRINUSE && --tries > 0);
if (r != 0) {
isc__nm_incstats(sock->mgr,
sock->statsindex[STATID_CONNECTFAIL]);