diff options
Diffstat (limited to 'csharp/src/Ice/Network.cs')
-rw-r--r-- | csharp/src/Ice/Network.cs | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/csharp/src/Ice/Network.cs b/csharp/src/Ice/Network.cs index 0981ebadbba..fee3a313700 100644 --- a/csharp/src/Ice/Network.cs +++ b/csharp/src/Ice/Network.cs @@ -242,7 +242,13 @@ namespace IceInternal { setTcpNoDelay(socket); socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, 1); - setTcpLoopbackFastPath(socket); + // + // FIX: the fast path loopback appears to cause issues with + // connection closure when it's enabled. Sometime, a peer + // doesn't receive the TCP/IP connection closure (RST) from + // the other peer and it ends up hanging. See bug #6093. + // + //setTcpLoopbackFastPath(socket); } catch(SocketException ex) { @@ -320,20 +326,25 @@ namespace IceInternal } } - public static void setTcpLoopbackFastPath(Socket socket) - { - const int SIO_LOOPBACK_FAST_PATH = (-1744830448); - - byte[] OptionInValue = BitConverter.GetBytes(1); - try - { - socket.IOControl(SIO_LOOPBACK_FAST_PATH, OptionInValue, null); - } - catch(Exception) - { - // Expected on platforms that do not support TCP Loopback Fast Path - } - } + // + // FIX: the fast path loopback appears to cause issues with + // connection closure when it's enabled. Sometime, a peer + // doesn't receive the TCP/IP connection closure (RST) from + // the other peer and it ends up hanging. See bug #6093. + // + // public static void setTcpLoopbackFastPath(Socket socket) + // { + // const int SIO_LOOPBACK_FAST_PATH = (-1744830448); + // byte[] OptionInValue = BitConverter.GetBytes(1); + // try + // { + // socket.IOControl(SIO_LOOPBACK_FAST_PATH, OptionInValue, null); + // } + // catch(Exception) + // { + // // Expected on platforms that do not support TCP Loopback Fast Path + // } + // } public static void setBlock(Socket socket, bool block) { |