@@ -15,7 +15,7 @@ def test_is_process_on_port_free_port():
1515 """Test is_process_on_port returns False when port is free."""
1616 # Find a free port
1717 with closing (socket .socket (socket .AF_INET , socket .SOCK_STREAM )) as sock :
18- sock .bind (("127.0.0.1 " , 0 ))
18+ sock .bind (("" , 0 ))
1919 free_port = sock .getsockname ()[1 ]
2020
2121 # Port should be free after socket is closed
@@ -26,8 +26,7 @@ def test_is_process_on_port_occupied_port():
2626 """Test is_process_on_port returns True when port is occupied."""
2727 # Create a server socket to occupy a port
2828 server_socket = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
29- server_socket .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
30- server_socket .bind (("127.0.0.1" , 0 ))
29+ server_socket .bind (("" , 0 ))
3130 server_socket .listen (1 )
3231
3332 occupied_port = server_socket .getsockname ()[1 ]
@@ -44,8 +43,7 @@ def test_is_process_on_port_ipv6():
4443 # Test with IPv6 socket
4544 try :
4645 server_socket = socket .socket (socket .AF_INET6 , socket .SOCK_STREAM )
47- server_socket .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
48- server_socket .bind (("::1" , 0 ))
46+ server_socket .bind (("" , 0 ))
4947 server_socket .listen (1 )
5048
5149 occupied_port = server_socket .getsockname ()[1 ]
@@ -64,8 +62,7 @@ def test_is_process_on_port_both_protocols():
6462 """Test is_process_on_port detects occupation on either IPv4 or IPv6."""
6563 # Create IPv4 server
6664 ipv4_socket = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
67- ipv4_socket .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
68- ipv4_socket .bind (("127.0.0.1" , 0 ))
65+ ipv4_socket .bind (("" , 0 ))
6966 ipv4_socket .listen (1 )
7067
7168 port = ipv4_socket .getsockname ()[1 ]
@@ -116,46 +113,37 @@ def test_is_process_on_port_permission_error():
116113 assert result is True
117114
118115
119- @ pytest . mark . parametrize ( "should_listen" , [ True , False ])
120- def test_is_process_on_port_concurrent_access ( should_listen ):
121- """Test is_process_on_port works correctly with concurrent access.
116+ def test_is_process_on_port_concurrent_access ():
117+ """Test is_process_on_port works correctly with concurrent access."""
118+ shared = None
122119
123- Args:
124- should_listen: Whether the server socket should call listen() or just bind().
125- """
126-
127- def create_server_and_test (port_holder , listen ):
120+ def create_server_and_test ():
121+ nonlocal shared
128122 server = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
129- server .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 )
130- server .bind (("127.0.0.1" , 0 ))
123+ server .bind (("" , 0 ))
131124
132- if listen :
133- server .listen (1 )
125+ server .listen (1 )
134126
135127 port = server .getsockname ()[1 ]
136- port_holder [ 0 ] = port
128+ shared = port
137129
138130 # Small delay to ensure the test runs while server is active
139131 time .sleep (0.1 )
140132 server .close ()
141133
142- port_holder = [None ]
143- thread = threading .Thread (
144- target = create_server_and_test , args = (port_holder , should_listen )
145- )
134+ thread = threading .Thread (target = create_server_and_test )
146135 thread .start ()
147136
148137 # Wait a bit for the server to start
149138 time .sleep (0.05 )
150139
151- if port_holder [0 ] is not None :
152- # Port should be occupied while server is running (both bound-only and listening)
153- assert is_process_on_port (port_holder [0 ])
140+ assert shared is not None
141+
142+ # Port should be occupied while server is running (both bound-only and listening)
143+ assert is_process_on_port (shared )
154144
155145 thread .join ()
156146
157- # After thread ends and server closes, port should be free
158- if port_holder [0 ] is not None :
159- # Give it a moment for the socket to be fully released
160- time .sleep (0.1 )
161- assert not is_process_on_port (port_holder [0 ])
147+ # Give it a moment for the socket to be fully released
148+ time .sleep (0.1 )
149+ assert not is_process_on_port (shared )
0 commit comments