protected void 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); TransportContext.ConnectionDispatcher.OnConnection(connection); _ = connection.Start(); } catch (Exception ex) { TransportContext.Log.LogCritical(ex, $"Unexpected exception in {nameof(ListenerContext)}.{nameof(HandleConnectionAsync)}."); } }
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)) { TransportContext.Log.ConnectionReset("(null)"); socket.Dispose(); return; } } var options = TransportContext.Options; var connection = new LibuvConnection(socket, TransportContext.Log, Thread, remoteEndPoint, localEndPoint, InputOptions, OutputOptions, options.MaxReadBufferSize, options.MaxWriteBufferSize); 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 virtual void DispatchConnection(UvStreamHandle socket) { var connection = new LibuvConnection(socket, Log, Thread); TransportContext.ConnectionDispatcher.OnConnection(connection); _ = connection.Start(); }
private void ReadStartCallback(UvStreamHandle handle, int status) { if (status < 0) { if (status != LibuvConstants.EOF) { Thread.Loop.Libuv.Check(status, out var ex); Log.LogError(0, ex, "DispatchPipe.ReadStart"); } DispatchPipe.Dispose(); return; } if (_closed || DispatchPipe.PendingCount() == 0) { return; } var acceptSocket = CreateAcceptSocket(); try { DispatchPipe.Accept(acceptSocket); } catch (UvException ex) { Log.LogError(0, ex, "DispatchPipe.Accept"); acceptSocket.Dispose(); return; } try { var connection = new LibuvConnection(acceptSocket, Log, Thread); TransportContext.ConnectionDispatcher.OnConnection(connection); _ = connection.Start(); } catch (UvException ex) { Log.LogError(0, ex, "ListenerSecondary.OnConnection"); acceptSocket.Dispose(); } }
protected async Task HandleConnectionAsync(UvStreamHandle socket) { try { var connection = new LibuvConnection(socket, TransportContext.Log, Thread); 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(); }