From 2b498f45cba3554d33d3d29e7c010ee8b893e9af Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Tue, 29 May 2018 21:58:56 +0200 Subject: [PATCH] Revert PortUtil.cs changes (#147) --- src/WireMock.Net/Http/PortUtil.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/WireMock.Net/Http/PortUtil.cs b/src/WireMock.Net/Http/PortUtil.cs index d98a2e30..519a9902 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 @@ namespace WireMock.Http /// 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(); } }