| Index: build/android/pylib/ports.py
|
| diff --git a/build/android/pylib/ports.py b/build/android/pylib/ports.py
|
| index 34efb5253c425b807f3549eec12707f653c4e744..578152cb0f1e029f53a06294e06b3c2fe19ca0a5 100644
|
| --- a/build/android/pylib/ports.py
|
| +++ b/build/android/pylib/ports.py
|
| @@ -9,11 +9,9 @@ import fcntl
|
| import httplib
|
| import logging
|
| import os
|
| -import re
|
| import socket
|
| import traceback
|
|
|
| -from pylib import cmd_helper
|
| from pylib import constants
|
|
|
|
|
| @@ -57,7 +55,7 @@ def AllocateTestServerPort():
|
| with open(constants.TEST_SERVER_PORT_FILE, 'r+') as fp:
|
| port = int(fp.read())
|
| ports_tried.append(port)
|
| - while IsHostPortUsed(port):
|
| + while not IsHostPortAvailable(port):
|
| port += 1
|
| ports_tried.append(port)
|
| if (port > constants.TEST_SERVER_PORT_LAST or
|
| @@ -67,7 +65,7 @@ def AllocateTestServerPort():
|
| fp.seek(0, os.SEEK_SET)
|
| fp.write('%d' % (port + 1))
|
| except Exception as e:
|
| - logging.info(e)
|
| + logging.error(e)
|
| finally:
|
| if fp_lock:
|
| fcntl.flock(fp_lock, fcntl.LOCK_UN)
|
| @@ -80,25 +78,23 @@ def AllocateTestServerPort():
|
| return port
|
|
|
|
|
| -def IsHostPortUsed(host_port):
|
| - """Checks whether the specified host port is used or not.
|
| -
|
| - Uses -n -P to inhibit the conversion of host/port numbers to host/port names.
|
| +def IsHostPortAvailable(host_port):
|
| + """Checks whether the specified host port is available.
|
|
|
| Args:
|
| - host_port: Port on host we want to check.
|
| + host_port: Port on host to check.
|
|
|
| Returns:
|
| - True if the port on host is already used, otherwise returns False.
|
| + True if the port on host is available, otherwise returns False.
|
| """
|
| - port_info = '(\*)|(127\.0\.0\.1)|(localhost):%d' % host_port
|
| - # TODO(jnd): Find a better way to filter the port. Note that connecting to the
|
| - # socket and closing it would leave it in the TIME_WAIT state. Setting
|
| - # SO_LINGER on it and then closing it makes the Python HTTP server crash.
|
| - re_port = re.compile(port_info, re.MULTILINE)
|
| - if re_port.search(cmd_helper.GetCmdOutput(['lsof', '-nPi:%d' % host_port])):
|
| + s = socket.socket()
|
| + try:
|
| + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
| + s.bind(('', host_port))
|
| + s.close()
|
| return True
|
| - return False
|
| + except socket.error:
|
| + return False
|
|
|
|
|
| def IsDevicePortUsed(device, device_port, state=''):
|
|
|