From e076cc70fa269102f734c613fbfc29fe1f7e86b1 Mon Sep 17 00:00:00 2001 From: Shreyas Zare Date: Fri, 17 Nov 2017 18:50:40 +0530 Subject: [PATCH] DnsServer: socket IOControl() done only on win32nt version. Added SocketException error handling for other OS versions. --- DnsServerCore/DnsServer.cs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/DnsServerCore/DnsServer.cs b/DnsServerCore/DnsServer.cs index f8225dd4..779d979d 100644 --- a/DnsServerCore/DnsServer.cs +++ b/DnsServerCore/DnsServer.cs @@ -101,7 +101,7 @@ namespace DnsServerCore { #region this code ignores ICMP port unreachable responses which creates SocketException in ReceiveFrom() - try + if (Environment.OSVersion.Platform == PlatformID.Win32NT) { const uint IOC_IN = 0x80000000; const uint IOC_VENDOR = 0x18000000; @@ -109,8 +109,6 @@ namespace DnsServerCore _udpListener.IOControl((IOControlCode)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null); } - catch - { } #endregion @@ -128,7 +126,23 @@ namespace DnsServerCore else remoteEP = new IPEndPoint(IPAddress.IPv6Any, 0); - bytesRecv = _udpListener.ReceiveFrom(recvBufferStream.Buffer, ref remoteEP); + try + { + bytesRecv = _udpListener.ReceiveFrom(recvBufferStream.Buffer, ref remoteEP); + } + catch (SocketException ex) + { + switch (ex.SocketErrorCode) + { + case SocketError.ConnectionReset: + case SocketError.HostUnreachable: + bytesRecv = 0; + break; + + default: + throw; + } + } if (bytesRecv > 0) {