diff --git a/src/Nethermind/Nethermind.Network.Stats/Model/DisconnectReason.cs b/src/Nethermind/Nethermind.Network.Stats/Model/DisconnectReason.cs index c14265ea159f..fbd862be8795 100644 --- a/src/Nethermind/Nethermind.Network.Stats/Model/DisconnectReason.cs +++ b/src/Nethermind/Nethermind.Network.Stats/Model/DisconnectReason.cs @@ -23,6 +23,7 @@ public enum DisconnectReason : byte ReplacingSessionWithOppositeDirection, OppositeDirectionCleanup, BackgroundTaskFailure, + ConnectionReset, Exception, // Non sync, non connection related disconnect @@ -105,6 +106,7 @@ public static EthDisconnectReason ToEthDisconnectReason(this DisconnectReason di DisconnectReason.IdentitySameAsSelf => EthDisconnectReason.IdentitySameAsSelf, DisconnectReason.ReceiveMessageTimeout => EthDisconnectReason.ReceiveMessageTimeout, DisconnectReason.MultipleHeaderDependencies => EthDisconnectReason.MultipleHeaderDependencies, + DisconnectReason.ConnectionReset => EthDisconnectReason.TcpSubSystemError, _ => EthDisconnectReason.Other, }; } diff --git a/src/Nethermind/Nethermind.Network/P2P/ProtocolHandlers/ZeroNettyP2PHandler.cs b/src/Nethermind/Nethermind.Network/P2P/ProtocolHandlers/ZeroNettyP2PHandler.cs index df1e76503813..de02eb25e4ec 100644 --- a/src/Nethermind/Nethermind.Network/P2P/ProtocolHandlers/ZeroNettyP2PHandler.cs +++ b/src/Nethermind/Nethermind.Network/P2P/ProtocolHandlers/ZeroNettyP2PHandler.cs @@ -121,7 +121,12 @@ public override void ExceptionCaught(IChannelHandlerContext context, Exception e } else if (_session?.Node?.IsStatic != true) { - _session.InitiateDisconnect(DisconnectReason.Exception, $"Error in communication with {GetClientId(_session)} ({exception.GetType().Name}): {exception.Message}"); + DisconnectReason reason = + exception is SocketException socketException && + socketException.SocketErrorCode == SocketError.ConnectionReset + ? DisconnectReason.ConnectionReset + : DisconnectReason.Exception; + _session.InitiateDisconnect(reason, $"Error in communication with {GetClientId(_session)} ({exception.GetType().Name}): {exception.Message}"); } else {