diff --git a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpListener.cs b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpListener.cs index 4be06324c1..6ab865922d 100644 --- a/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpListener.cs +++ b/OpenSim/Framework/Servers/HttpServer/OSHttpServer/HttpListener.cs @@ -125,30 +125,57 @@ namespace OSHttpServer private async void AcceptLoop() { - try + while (true) { - while (true) + if (m_shutdown) { - if (m_shutdown) - { - m_shutdownEvent.Set(); - break; - } + m_shutdownEvent?.Set(); + break; + } - Socket socket = await m_listener.AcceptSocketAsync(m_CancellationSource.Token).ConfigureAwait(false); ; + Socket socket = null; + try + { + socket = await m_listener.AcceptSocketAsync(m_CancellationSource.Token).ConfigureAwait(false); if (!socket.Connected) { socket.Dispose(); continue; } + } + catch (OperationCanceledException) + { + m_shutdownEvent?.Set(); + break; + } + catch (SocketException snssErr) + { + m_logWriter.Write(this, LogPrio.Debug, "OSHTTP Accept wait ignoring error: " + snssErr.Message); + socket?.Dispose(); + continue; + } + catch (Exception err) + { + m_logWriter.Write(this, LogPrio.Debug, "OSHTTP Accept wait fatal error: " + err.Message); + ExceptionThrown?.Invoke(this, err); + } - socket.NoDelay = true; + if (m_shutdown) + { + m_shutdownEvent?.Set(); + socket?.Dispose(); + break; + } + socket.NoDelay = true; + try + { if (!OnAcceptingSocket(socket)) { socket.Disconnect(true); continue; } + if (socket.Connected) { m_logWriter.Write(this, LogPrio.Debug, $"Accepted connection from: {socket.RemoteEndPoint}"); @@ -159,17 +186,24 @@ namespace OSHttpServer m_contextFactory.CreateContext(socket); } else - socket.Dispose(); + socket?.Dispose(); + } + catch (OperationCanceledException) + { + m_shutdownEvent?.Set(); + break; + } + catch (SocketException snssErr) + { + m_logWriter.Write(this, LogPrio.Debug, "OSHTTP Accept processing ignoring error: " + snssErr.Message); + socket?.Dispose(); + continue; + } + catch (Exception err) + { + m_logWriter.Write(this, LogPrio.Debug, "OSHTTP Accept processing fatal error: " + err.Message); + ExceptionThrown?.Invoke(this, err); } - } - catch (OperationCanceledException) - { - m_shutdownEvent.Set(); - } - catch (Exception err) - { - m_logWriter.Write(this, LogPrio.Debug, err.Message); - ExceptionThrown?.Invoke(this, err); } }