protected internal void HandleConnection(UvStreamHandle socket) { try { IPEndPoint remoteEndPoint = null; IPEndPoint localEndPoint = null; if (socket is UvTcpHandle tcpHandle) { try { remoteEndPoint = tcpHandle.GetPeerIPEndPoint(); localEndPoint = tcpHandle.GetSockIPEndPoint(); } catch (UvException ex) when(LibuvConstants.IsConnectionReset(ex.StatusCode)) { LibuvTrace.ConnectionReset(TransportContext.Log, "(null)"); socket.Dispose(); return; } } var options = TransportContext.Options; #pragma warning disable CS0618 var connection = new LibuvConnection(socket, TransportContext.Log, Thread, remoteEndPoint, localEndPoint, InputOptions, OutputOptions, options.MaxReadBufferSize, options.MaxWriteBufferSize); #pragma warning restore CS0618 connection.Start(); bool accepted = _acceptQueue.Writer.TryWrite(connection); Debug.Assert(accepted, "The connection was not written to the channel!"); } catch (Exception ex) { TransportContext.Log.LogCritical(ex, $"Unexpected exception in {nameof(ListenerContext)}.{nameof(HandleConnection)}."); } }
protected async Task HandleConnectionAsync(UvStreamHandle socket) { try { IPEndPoint remoteEndPoint = null; IPEndPoint localEndPoint = null; if (socket is UvTcpHandle tcpHandle) { try { remoteEndPoint = tcpHandle.GetPeerIPEndPoint(); localEndPoint = tcpHandle.GetSockIPEndPoint(); } catch (UvException ex) when(LibuvConstants.IsConnectionReset(ex.StatusCode)) { TransportContext.Log.ConnectionReset("(null)"); socket.Dispose(); return; } } var connection = new LibuvConnection(socket, TransportContext.Log, Thread, remoteEndPoint, localEndPoint); var middlewareTask = TransportContext.ConnectionDispatcher.OnConnection(connection); var transportTask = connection.Start(); await transportTask; await middlewareTask; connection.Dispose(); } catch (Exception ex) { TransportContext.Log.LogCritical(ex, $"Unexpected exception in {nameof(ListenerContext)}.{nameof(HandleConnectionAsync)}."); } }
protected virtual void DispatchConnection(UvStreamHandle socket) { var connection = new LibuvConnection(this, socket); _ = connection.Start(); }