From 4c7adabd6904c049b145b1be565b84a00f368d3f Mon Sep 17 00:00:00 2001 From: Andreas Tolfsen Date: Mon, 18 Jan 2016 22:12:55 +0000 Subject: [PATCH] Bug 1240601 - Set timeout on socket in transport.wait_for_port; r=automatedtester If the client is able to connect but the server never sends any data, the socket should time out in order for the function not to hang forever. That said, polling for ports like this is inherently racy and we should instead specify and bind what port we wish Marionette to start on in the future. --- .../marionette/transport/marionette_transport/transport.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/testing/marionette/transport/marionette_transport/transport.py b/testing/marionette/transport/marionette_transport/transport.py index 28ab714cd6e..455760a5787 100644 --- a/testing/marionette/transport/marionette_transport/transport.py +++ b/testing/marionette/transport/marionette_transport/transport.py @@ -289,22 +289,23 @@ class TcpTransport(object): def wait_for_port(host, port, timeout=60): - """ Wait for the specified host/port to be available.""" + """Wait for the specified host/port to become available.""" starttime = datetime.datetime.now() poll_interval = 0.1 while datetime.datetime.now() - starttime < datetime.timedelta(seconds=timeout): sock = None try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(0.5) sock.connect((host, port)) data = sock.recv(16) sock.close() - if ':' in data: + if ":" in data: return True except socket.error: pass finally: - if sock: + if sock is not None: sock.close() time.sleep(poll_interval) return False