def get_available_host_port(): """Gets a host port number available for adb forward. Returns: An integer representing a port number on the host available for adb forward. Raises: Error: when no port is found after MAX_PORT_ALLOCATION_RETRY times. """ for _ in range(MAX_PORT_ALLOCATION_RETRY): port = portpicker.PickUnusedPort() # Make sure adb is not using this port so we don't accidentally # interrupt ongoing runs by trying to bind to the port. if port not in adb.list_occupied_adb_ports(): return port raise Error('Failed to find available port after {} retries'.format( MAX_PORT_ALLOCATION_RETRY))
def get_available_host_port(): """Gets a host port number available for adb forward. Returns: An integer representing a port number on the host available for adb forward. Raises: Error: when no port is found after MAX_PORT_ALLOCATION_RETRY times. """ # Only import adb module if needed. from mobly.controllers.android_device_lib import adb port = portpicker.pick_unused_port() if not adb.is_adb_available(): return port for _ in range(MAX_PORT_ALLOCATION_RETRY): # Make sure adb is not using this port so we don't accidentally # interrupt ongoing runs by trying to bind to the port. if port not in adb.list_occupied_adb_ports(): return port port = portpicker.pick_unused_port() raise Error('Failed to find available port after {} retries'.format( MAX_PORT_ALLOCATION_RETRY))
def is_port_available(port): """Checks if a given port number is available on the system. Args: port: An integer which is the port number to check. Returns: True if the port is available; False otherwise. """ # Make sure adb is not using this port so we don't accidentally interrupt # ongoing runs by trying to bind to the port. if port in adb.list_occupied_adb_ports(): return False s = None try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind(('localhost', port)) return True except socket.error: return False finally: if s: s.close()