diff --git a/src/WireMock.Net/Http/PortUtil.cs b/src/WireMock.Net/Http/PortUtil.cs index d98a2e302..519a99029 100644 --- a/src/WireMock.Net/Http/PortUtil.cs +++ b/src/WireMock.Net/Http/PortUtil.cs @@ -9,7 +9,6 @@ namespace WireMock.Http /// public static class PortUtil { - private static readonly IPEndPoint DefaultLoopbackEndpoint = new IPEndPoint(IPAddress.Loopback, port: 0); private static readonly Regex UrlDetailsRegex = new Regex(@"^(?\w+)://[^/]+?(?\d+)?/", RegexOptions.Compiled); /// @@ -18,10 +17,17 @@ public static class PortUtil /// see http://stackoverflow.com/questions/138043/find-the-next-tcp-port-in-net. public static int FindFreeTcpPort() { - using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) + TcpListener tcpListener = null; + try { - socket.Bind(DefaultLoopbackEndpoint); - return ((IPEndPoint)socket.LocalEndPoint).Port; + tcpListener = new TcpListener(IPAddress.Loopback, 0); + tcpListener.Start(); + + return ((IPEndPoint)tcpListener.LocalEndpoint).Port; + } + finally + { + tcpListener?.Stop(); } }