diff --git a/FastGithub.Dns/DnsServer.cs b/FastGithub.Dns/DnsServer.cs index a7c5650..6116aa3 100644 --- a/FastGithub.Dns/DnsServer.cs +++ b/FastGithub.Dns/DnsServer.cs @@ -50,9 +50,24 @@ namespace FastGithub.Dns const int SIO_UDP_CONNRESET = unchecked((int)0x9800000C); this.socket.IOControl(SIO_UDP_CONNRESET, new byte[4], new byte[4]); } - this.socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); - this.socket.Bind(new IPEndPoint(address, port)); + + var maxSpinCount = 100; + var spinWait = new SpinWait(); + var localEndPoint = new IPEndPoint(address, port); + + for (var i = 0; i < maxSpinCount; i++) + { + try + { + this.socket.Bind(localEndPoint); + break; + } + catch (SocketException ex) when (ex.SocketErrorCode == SocketError.AccessDenied) + { + spinWait.SpinOnce(); + } + } } ///