File tree Expand file tree Collapse file tree 1 file changed +24
-6
lines changed
py/selenium/webdriver/common Expand file tree Collapse file tree 1 file changed +24
-6
lines changed Original file line number Diff line number Diff line change 27
27
28
28
29
29
def free_port () -> int :
30
- """Determines a free port using sockets."""
31
- free_socket = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
32
- free_socket .bind (("127.0.0.1" , 0 ))
33
- free_socket .listen (5 )
34
- port : int = free_socket .getsockname ()[1 ]
35
- free_socket .close ()
30
+ """Determines a free port using sockets.
31
+
32
+ First try IPv4, but use IPv6 if it can't bind (IPv6-only system).
33
+ """
34
+ free_socket = None
35
+ try :
36
+ # IPv4
37
+ free_socket = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
38
+ free_socket .bind (("127.0.0.1" , 0 ))
39
+ except OSError :
40
+ if free_socket :
41
+ free_socket .close ()
42
+ # IPv6
43
+ try :
44
+ free_socket = socket .socket (socket .AF_INET6 , socket .SOCK_STREAM )
45
+ free_socket .bind (("::1" , 0 ))
46
+ except OSError :
47
+ raise RuntimeError ("Can't find free port (Unable to bind to IPv4 or IPv6)" )
48
+ try :
49
+ port : int = free_socket .getsockname ()[1 ]
50
+ except Exception as e :
51
+ raise RuntimeError (f"Can't find free port: ({ e } )" )
52
+ finally :
53
+ free_socket .close ()
36
54
return port
37
55
38
56
You can’t perform that action at this time.
0 commit comments