From 472d37dc01f32db1b73d62b4d197c74f68d16009 Mon Sep 17 00:00:00 2001 From: j Date: Sat, 2 Jan 2016 15:06:48 +0530 Subject: [PATCH] no traceback if computer has no local network --- oml/localnodes.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/oml/localnodes.py b/oml/localnodes.py index 0ec1213..915d0f0 100644 --- a/oml/localnodes.py +++ b/oml/localnodes.py @@ -46,6 +46,7 @@ def can_connect(data): #logger.debug('failed to connect to local node %s', data, exc_info=1) return False + class LocalNodesBase(Thread): _PORT = 9851 @@ -99,10 +100,12 @@ class LocalNodesBase(Thread): self.update_node(data) except socket.timeout: pass + except OSError: # no local interface exists + self.wait(60) except: if self._active: logger.debug('receive failed. restart later', exc_info=1) - time.sleep(10) + self.wait(60) finally: if self._active: now = time.mktime(time.localtime()) @@ -166,6 +169,12 @@ class LocalNodesBase(Thread): self._socket.close() return Thread.join(self) + def wait(self, timeout): + step = min(timeout, 1) + while self._active and timeout > 0: + time.sleep(step) + timeout -= step + class LocalNodes4(LocalNodesBase): _BROADCAST = "239.255.255.250"