diff --git a/LCS/PyCommon/util.py b/LCS/PyCommon/util.py index cef4cda88c4082e34e5c74afccc88bb390cfdd43..8ddd6531dace52f62e9c1419fbaecc8a6fdc71fb 100644 --- a/LCS/PyCommon/util.py +++ b/LCS/PyCommon/util.py @@ -194,12 +194,19 @@ def single_line_with_single_spaces(lines: str) -> str: return line length = new_length -def find_free_port(): - '''find and return a random free network port''' +def find_free_port(preferred_port: int=0): + '''find and return a random free network port, preferably the given <preferred_port>''' import socket from contextlib import closing with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s: - s.bind(('', 0)) + try: + s.bind(('', preferred_port)) + except OSError as e: + if e.errno==98: # OSError: [Errno 98] Address already in use + s.bind(('', 0)) + else: + raise + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) return s.getsockname()[1] diff --git a/SAS/TMSS/test/test_utils.py b/SAS/TMSS/test/test_utils.py index 79cf57cfccebc8a904819dc99f8f8d780ef998bf..d64d416d2582f599099658dfbbf659ab1820d7f8 100644 --- a/SAS/TMSS/test/test_utils.py +++ b/SAS/TMSS/test/test_utils.py @@ -233,7 +233,7 @@ class TMSSTestEnvironment: self.database = TMSSTestDatabaseInstance() self.django_server = TMSSDjangoServerInstance(db_dbcreds_id=self.database.dbcreds_id, ldap_dbcreds_id=self.ldap_server.dbcreds_id, - port=find_free_port()) + port=find_free_port(8000)) def start(self): self.ldap_server.start()