From: Batch User Date: Thu, 20 Feb 2014 19:51:56 +0000 (-0800) Subject: add options rotate handling X-Git-Tag: v1.12.0-py3~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=31a95491c76bca5eb355de06d918ae5f39588ade;p=thirdparty%2Fdnspython.git add options rotate handling for resolv.conf "options rotate" line, enable shuffling of nameservers before each query. (should just rotate start position and maintain order?). --- diff --git a/dns/resolver.py b/dns/resolver.py index 2d28f701..97bd0a88 100644 --- a/dns/resolver.py +++ b/dns/resolver.py @@ -21,6 +21,7 @@ import socket import sys import time +import random try: import threading as _threading @@ -510,6 +511,7 @@ class Resolver(object): self.cache = None self.flags = None self.retry_servfail = False + self.rotate = False def read_resolv_conf(self, f): """Process f as a file in the /etc/resolv.conf format. If f is @@ -540,6 +542,9 @@ class Resolver(object): elif tokens[0] == 'search': for suffix in tokens[1:]: self.search.append(dns.name.from_text(suffix)) + elif tokens[0] == 'options': + if len(tokens) == 2 and tokens[1] == 'rotate': + self.rotate = True finally: if want_close: f.close() @@ -808,6 +813,8 @@ class Resolver(object): # make a copy of the servers list so we can alter it later. # nameservers = self.nameservers[:] + if self.rotate: + random.shuffle(nameservers) backoff = 0.10 while response is None: if len(nameservers) == 0: