Handle situation when binding fails

This commit is contained in:
shortcutme 2018-02-09 17:45:12 +01:00
parent 07bf8ef3b1
commit 189627c89e
No known key found for this signature in database
GPG key ID: 5B63BAE6CB9613AE

View file

@ -25,18 +25,30 @@ class BroadcastServer(object):
if hasattr(socket, 'SO_REUSEPORT'): if hasattr(socket, 'SO_REUSEPORT'):
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
binded = False
for retry in range(3): for retry in range(3):
try: try:
sock.bind((self.listen_ip, self.listen_port)) sock.bind((self.listen_ip, self.listen_port))
binded = True
break break
except Exception as err: except Exception as err:
self.log.error("Socket bind error: %s, retry #%s" % (Debug.formatException(err), retry)) self.log.error(
time.sleep(0.1) "Socket bind to %s:%s error: %s, retry #%s" %
(self.listen_ip, self.listen_port, Debug.formatException(err), retry)
)
time.sleep(retry)
return sock if binded:
return sock
else:
return False
def start(self): # Listens for discover requests def start(self): # Listens for discover requests
self.sock = self.createBroadcastSocket() self.sock = self.createBroadcastSocket()
if not self.sock:
self.log.error("Unable to listen on port %s" % self.listen_port)
return
self.log.debug("Started on port %s" % self.listen_port) self.log.debug("Started on port %s" % self.listen_port)
self.running = True self.running = True