This is an automated email from the ASF dual-hosted git repository. jdanek pushed a commit to branch jd_tryout in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
commit 59095c5c0da6d0bc66204e02a599ff6d64f3a689 Author: Jiri Daněk <[email protected]> AuthorDate: Sun Jan 30 01:31:33 2022 +0100 DISPATCH-2323 Try binding to a port before handing it out as "free" --- tests/system_test.py | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/tests/system_test.py b/tests/system_test.py index 280f0a3..46a7eb5 100755 --- a/tests/system_test.py +++ b/tests/system_test.py @@ -175,19 +175,37 @@ def get_local_host_socket(protocol_family='IPv4'): return s, host -def port_available(port, protocol_family='IPv4'): +def port_refuses_connection(port, protocol_family='IPv4'): """Return true if connecting to host:port gives 'connection refused'.""" s, host = get_local_host_socket(protocol_family) - available = False try: s.connect((host, port)) - except socket.error as e: - available = e.errno == errno.ECONNREFUSED - except: - pass + except OSError as e: + return e.errno == errno.ECONNREFUSED + finally: + s.close() + + return False + - s.close() - return available +def port_permits_binding(port, protocol_family='IPv4'): + """Return true if binding to the port succeeds.""" + s, _ = get_local_host_socket(protocol_family) + host = "" + try: + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # so that followup binders are not blocked + s.bind((host, port)) + except OSError: + return False + finally: + s.close() + + return True + + +def port_available(port, protocol_family='IPv4'): + """Return true if a new server will be able to bind to the port.""" + return port_refuses_connection(port, protocol_family) and port_permits_binding(port, protocol_family) def wait_port(port, protocol_family='IPv4', **retry_kwargs): --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
