From ccfd7b41846bd61f5ce1036660be83467e756da8 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Mon, 27 Jan 2020 20:18:07 +0100 Subject: [PATCH] Use the full timeout if we don't have a cached response --- src/resolver.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/resolver.rs b/src/resolver.rs index 3f20cc5..f0758a9 100644 --- a/src/resolver.rs +++ b/src/resolver.rs @@ -33,12 +33,16 @@ pub async fn resolve_udp( ext_socket.connect(&globals.upstream_addr).await?; dns::set_edns_max_payload_size(&mut packet, DNS_MAX_PACKET_SIZE as u16)?; let mut response; - let timeout_if_cached = globals.udp_timeout / 2; + let timeout = if has_cached_response { + globals.udp_timeout / 2 + } else { + globals.udp_timeout + }; loop { ext_socket.send(&packet).await?; response = vec![0u8; DNS_MAX_PACKET_SIZE]; dns::set_rcode_servfail(&mut response); - let fut = tokio::time::timeout(timeout_if_cached, ext_socket.recv_from(&mut response[..])); + let fut = tokio::time::timeout(timeout, ext_socket.recv_from(&mut response[..])); match fut.await { Ok(Ok((response_len, response_addr))) => { response.truncate(response_len);