private void OnListenPipe(UvStreamHandle pipe, int status, UvException error) { if (status < 0) { return; } var dispatchPipe = new UvPipeHandle(Log); // Add to the list of created pipes for disposal tracking _createdPipes.Add(dispatchPipe); try { dispatchPipe.Init(Thread.Loop, Thread.QueueCloseHandle, true); pipe.Accept(dispatchPipe); // Ensure client sends "Kestrel" before adding pipe to _dispatchPipes. var readContext = new PipeReadContext(this); dispatchPipe.ReadStart( (handle, status2, state) => ((PipeReadContext)state).AllocCallback(handle, status2), (handle, status2, state) => ((PipeReadContext)state).ReadCallback(handle, status2), readContext); } catch (UvException ex) { dispatchPipe.Dispose(); Log.LogError(0, ex, "ListenerPrimary.OnListenPipe"); } }
private void ConnectionCallback(UvStreamHandle listenSocket, int status, UvException error, object state) { var listener = (UvListener)state; if (error != null) { listener.Log.LogError(0, error, "Listener.ConnectionCallback"); } else if (!listener._closed) { UvStreamHandle acceptSocket = null; try { acceptSocket = CreateAcceptSocket(); listenSocket.Accept(acceptSocket); DispatchConnection(acceptSocket); } catch (UvException ex) when(UvConstants.IsConnectionReset(ex.StatusCode)) { Log.ConnectionReset("(null)"); acceptSocket?.Dispose(); } catch (UvException ex) { Log.LogError(0, ex, "Listener.OnConnection"); acceptSocket?.Dispose(); } } }