Skip to content

Commit 80190d8

Browse files
committed
Try ipv4 and fallback to ipv6
1 parent fa8f9e7 commit 80190d8

File tree

1 file changed

+8
-19
lines changed

1 file changed

+8
-19
lines changed

dotnet/src/webdriver/Internal/PortUtilities.cs

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -33,30 +33,19 @@ public static class PortUtilities
3333
/// <returns>A random, free port to be listened on.</returns>
3434
public static int FindFreePort()
3535
{
36-
// Prefer IPv6 dual-mode when available, but fall back robustly to IPv4
36+
// Prefer IPv4, but fall back robustly to IPv6
3737
try
3838
{
39-
using var ipV6socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
40-
41-
// Some platforms may not support DualMode or IPv6 at all; ignore failures and let bind decide
42-
try
43-
{
44-
ipV6socket.DualMode = true;
45-
}
46-
catch
47-
{
48-
// Ignored; we'll still attempt to bind to IPv6 loopback
49-
}
50-
51-
ipV6socket.Bind(new IPEndPoint(IPAddress.IPv6Loopback, 0));
52-
return ((IPEndPoint)ipV6socket.LocalEndPoint!).Port;
53-
}
54-
catch(SocketException)
55-
{
56-
// If creating/binding the IPv6 socket fails for any reason, fall back to IPv4
5739
using var ipV4socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
5840
ipV4socket.Bind(new IPEndPoint(IPAddress.Loopback, 0));
5941
return ((IPEndPoint)ipV4socket.LocalEndPoint!).Port;
6042
}
43+
catch (SocketException)
44+
{
45+
// If creating/binding the IPv4 socket fails for any reason, fall back to IPv6
46+
using var ipV6socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);
47+
ipV6socket.Bind(new IPEndPoint(IPAddress.IPv6Loopback, 0));
48+
return ((IPEndPoint)ipV6socket.LocalEndPoint!).Port;
49+
}
6150
}
6251
}

0 commit comments

Comments
 (0)