diff options
author | Bob Halley <halley@dnspython.org> | 2012-04-08 12:10:28 +0100 |
---|---|---|
committer | Bob Halley <halley@dnspython.org> | 2012-04-08 12:10:28 +0100 |
commit | 7523aa1e5db9ad7cb3365e8498844b22ebd87bf2 (patch) | |
tree | 09ed27bdd36ad6ee6813a46d305d65b76857fb74 /dns | |
parent | d128fe0847580dfeeba06a9b0618edd531619461 (diff) | |
download | dnspython-7523aa1e5db9ad7cb3365e8498844b22ebd87bf2.tar.gz |
try TCP if UDP response is truncated
Diffstat (limited to 'dns')
-rw-r--r-- | dns/resolver.py | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/dns/resolver.py b/dns/resolver.py index 90f95e8..2f56c7d 100644 --- a/dns/resolver.py +++ b/dns/resolver.py @@ -23,6 +23,7 @@ import sys import time import dns.exception +import dns.flags import dns.ipv4 import dns.ipv6 import dns.message @@ -778,6 +779,12 @@ class Resolver(object): response = dns.query.udp(request, nameserver, timeout, self.port, source=source) + if response.flags & dns.flags.TC: + # Response truncated; retry with TCP. + timeout = self._compute_timeout(start) + response = dns.query.tcp(request, nameserver, + timeout, self.port, + source=source) except (socket.error, dns.exception.Timeout): # # Communication failure or timeout. Go to the @@ -800,6 +807,16 @@ class Resolver(object): nameservers.remove(nameserver) response = None continue + except EOFError: + # + # We're using TCP and they hung up on us. + # Probably they don't support TCP (though + # they're supposed to!). Take it out of the + # mix and continue. + # + nameservers.remove(nameserver) + response = None + continue rcode = response.rcode() if rcode == dns.rcode.NOERROR or \ rcode == dns.rcode.NXDOMAIN: |