diff options
| author | Brian Wellington <bwelling@xbill.org> | 2020-06-24 10:01:13 -0700 |
|---|---|---|
| committer | Brian Wellington <bwelling@xbill.org> | 2020-06-24 10:01:13 -0700 |
| commit | 9cfb67a66c635992de0f68f131a0756cfd95b3cf (patch) | |
| tree | 7e3f67a3038c8a36d15d1a15f6b349c16606ea30 /tests | |
| parent | 630f580270da66475cd8d829c4ff89c434fc194e (diff) | |
| download | dnspython-9cfb67a66c635992de0f68f131a0756cfd95b3cf.tar.gz | |
Close extra UDP sockets more quickly.
If any UDP sockets are left open due to the corresponding TCP ports
being in use, close them.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/nanonameserver.py | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/tests/nanonameserver.py b/tests/nanonameserver.py index 555f9cc..57de2df 100644 --- a/tests/nanonameserver.py +++ b/tests/nanonameserver.py @@ -98,29 +98,36 @@ class Server(threading.Thread): # We're making the sockets now so they can be sent to by the # caller immediately (i.e. no race with the listener starting # in the thread). - open_udp_sockets = [] - while True: - if self.enable_udp: - self.udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0) - self.udp.bind((self.address, self.port)) - self.udp_address = self.udp.getsockname() - if self.enable_tcp: - self.tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) - self.tcp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - if self.port is 0 and self.enable_udp: - try: - self.tcp.bind((self.address, self.udp_address[1])) - except OSError as e: - if e.errno == errno.EADDRINUSE and \ - len(open_udp_sockets) < 100: - open_udp_sockets.append(self.udp) - continue - raise - else: - self.tcp.bind((self.address, self.port)) - self.tcp.listen() - self.tcp_address = self.tcp.getsockname() - break + open_sockets = [] + try: + while True: + if self.enable_udp: + self.udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, + 0) + self.udp.bind((self.address, self.port)) + self.udp_address = self.udp.getsockname() + if self.enable_tcp: + self.tcp = socket.socket(socket.AF_INET, + socket.SOCK_STREAM, 0) + self.tcp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, + 1) + if self.port is 0 and self.enable_udp: + try: + self.tcp.bind((self.address, self.udp_address[1])) + except OSError as e: + if e.errno == errno.EADDRINUSE and \ + len(open_udp_sockets) < 100: + open_udp_sockets.append(self.udp) + continue + raise + else: + self.tcp.bind((self.address, self.port)) + self.tcp.listen() + self.tcp_address = self.tcp.getsockname() + break + finally: + for udp_socket in open_udp_sockets: + udp_socket.close() if self.use_thread: self.start() return self |
