Handle situation when binding fails
This commit is contained in:
parent
07bf8ef3b1
commit
189627c89e
1 changed files with 15 additions and 3 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue