From: Brian Wellington Date: Wed, 24 Jun 2020 17:01:13 +0000 (-0700) Subject: Close extra UDP sockets more quickly. X-Git-Tag: v2.0.0rc2~67^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9cfb67a66c635992de0f68f131a0756cfd95b3cf;p=thirdparty%2Fdnspython.git Close extra UDP sockets more quickly. If any UDP sockets are left open due to the corresponding TCP ports being in use, close them. --- diff --git a/tests/nanonameserver.py b/tests/nanonameserver.py index 555f9cc3..57de2df9 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