def handle_connection(self, c, address): logging.info('New connection from %s:%s' % address) try: if self.handshake: expected_challenge, response = self.handshake logging.debug('Awaiting challenge.') challenge = c.recv() logging.debug('Got challenge: "%s"', challenge) if challenge == expected_challenge: logging.debug('Correct challenge, sending response: "%s"', response) c.send(response) c.flush() else: logging.warning('Failed handshake!') logging.warning('Expected challenge: %s', expected_challenge) logging.warning('Actual challenge: %s', challenge) return q = Queue() f = Queue() coio.stackless.tasklet(self.sender)(q, c, f) coio.stackless.tasklet(self.receiver)(q, c, f) f.popleft() f.popleft() except DisconnectedException: logging.warning('Client disconnected') finally: try: c.close() logging.info('Connection closed') except DisconnectedException: pass
def testResilience(self): try: token = id(self) q = Queue() def callback(value, token): q.append((value, token)) port = 6000 host = ('localhost', port) p = launch_echoserver(port) coio.sleep(1) messenger = Messenger(host, reconnect_max_interval=0.1) messenger.connect() messenger.send('1', token, callback) assert q.popleft() == ('1', token) os.kill(p.pid, signal.SIGKILL) messenger.send('2', token, callback) coio.sleep(1) messenger.send('3', token, callback) assert q.popleft() == (None, token) assert q.popleft() == (None, token) p = launch_echoserver(port) coio.sleep(1) messenger.send('4', token, callback) assert q.popleft() == ('4', token) messenger.close() coio.sleep(1) finally: os.kill(p.pid, signal.SIGKILL)