From a90e833c3b320647f52a4d7fc235389862a2052c Mon Sep 17 00:00:00 2001 From: Kelly Campbell Date: Tue, 27 Nov 2018 11:24:32 -0500 Subject: [PATCH] Retry dns queries with TCP if UDP has an i/o timeout Signed-off-by: Kelly Campbell --- pkg/issuer/acme/dns/util/wait.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/issuer/acme/dns/util/wait.go b/pkg/issuer/acme/dns/util/wait.go index b308594ba..cad1a7cd9 100644 --- a/pkg/issuer/acme/dns/util/wait.go +++ b/pkg/issuer/acme/dns/util/wait.go @@ -144,7 +144,9 @@ func dnsQuery(fqdn string, rtype uint16, nameservers []string, recursive bool) ( udp := &dns.Client{Net: "udp", Timeout: DNSTimeout} in, _, err = udp.Exchange(m, ns) - if err == dns.ErrTruncated { + if err == dns.ErrTruncated || + (err != nil && strings.HasPrefix(err.Error(), "read udp") && strings.HasSuffix(err.Error(), "i/o timeout")) { + glog.V(6).Infof("UDP dns lookup failed, retrying with TCP: %v", err) tcp := &dns.Client{Net: "tcp", Timeout: DNSTimeout} // If the TCP request succeeds, the err will reset to nil in, _, err = tcp.Exchange(m, ns)