summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Alejandro <ivanalejandro0@gmail.com>2014-07-14 16:23:20 -0300
committerIvan Alejandro <ivanalejandro0@gmail.com>2014-07-15 15:43:47 -0300
commit7c7c2d49b172d08e106e297101142747eaf78944 (patch)
tree7cee5876e7320a50ad805c1dd279d9a9da995152
parent57ac3750970777bb5b6e372e5eb00f3144098d90 (diff)
Use polling to prevent communication issues.
-rw-r--r--src/leap/bitmask/backend/signaler.py30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/leap/bitmask/backend/signaler.py b/src/leap/bitmask/backend/signaler.py
index f21f0998..7401f3a0 100644
--- a/src/leap/bitmask/backend/signaler.py
+++ b/src/leap/bitmask/backend/signaler.py
@@ -38,6 +38,8 @@ class Signaler(object):
"""
PORT = "5667"
SERVER = "tcp://localhost:%s" % PORT
+ POLL_TIMEOUT = 1000 # ms
+ POLL_TRIES = 3
def __init__(self):
"""
@@ -148,13 +150,23 @@ class Signaler(object):
# logger.debug("Signaling '{0}'".format(request))
self._socket.send(request)
- # Get the reply.
- try:
- self._socket.recv()
- # response = self._socket.recv()
- # msg = "Received reply for '{0}' -> '{1}'"
- # msg = msg.format(request, response)
- # logger.debug(msg)
- except zmq.error.Again as e:
- msg = "Timeout error contacting signaler. {0!r}".format(e)
+ poll = zmq.Poller()
+ poll.register(self._socket, zmq.POLLIN)
+
+ reply = None
+ tries = 0
+
+ while tries < self.POLL_TRIES:
+ socks = dict(poll.poll(self.POLL_TIMEOUT))
+ if socks.get(self._socket) == zmq.POLLIN:
+ reply = self._socket.recv()
+ break
+
+ tries += 1
+
+ if reply is None:
+ msg = "Timeout error contacting backend."
logger.critical(msg)
+ # else:
+ # msg = "Received reply for '{0}' -> '{1}'".format(request, reply)
+ # logger.debug(msg)