diff --git a/src/core/Akka/IO/TcpListener.cs b/src/core/Akka/IO/TcpListener.cs index 01dd20f3486..12d035f9be1 100644 --- a/src/core/Akka/IO/TcpListener.cs +++ b/src/core/Akka/IO/TcpListener.cs @@ -142,7 +142,7 @@ private bool HandleStatsMessages(object msg) { subscriber.Tell(stats); } - } + } return true; case Tcp.SubscribeToTcpListenerStats subscribe: @@ -277,10 +277,17 @@ private void HandleAccept(SocketAsyncEventArgs saea) break; case SocketError.ConnectionReset: + case SocketError.ConnectionAborted: case SocketError.NoBufferSpaceAvailable: case SocketError.TryAgain: case SocketError.TimedOut: case SocketError.WouldBlock: + case SocketError.Interrupted: + case SocketError.TooManyOpenSockets: + case SocketError.NetworkUnreachable: + case SocketError.HostDown: + case SocketError.HostUnreachable: + case SocketError.ConnectionRefused: _retryCount++; _log.Warning("Retriable socket error in TcpListener: {0} - retrying accept operation in 10ms", saea.SocketError); @@ -289,9 +296,11 @@ private void HandleAccept(SocketAsyncEventArgs saea) Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromMilliseconds(10), Self, new RetryAccept(saea), ActorRefs.NoSender); break; + + // Fatal errors - the listener socket itself is broken default: _failedCount++; - _log.Error("Fatal socket error in TcpListener: {0}", saea.SocketError); + _log.Error("Fatal socket error in TcpListener: {0} - stopping listener", saea.SocketError); Context.Stop(Self); break; }