private void HandleAcceptedClient(SecureSocket incomingClient, ALPNExtensionMonitor monitor) { bool backToHttp11 = false; string selectedProtocol = Protocols.Http1; if (_useHandshake) { try { if (_options.Protocol != SecureProtocol.None) { incomingClient.MakeSecureHandshake(_options); selectedProtocol = incomingClient.SelectedProtocol; } } catch (SecureHandshakeException ex) { switch (ex.Reason) { case SecureHandshakeFailureReason.HandshakeInternalError: backToHttp11 = true; break; case SecureHandshakeFailureReason.HandshakeTimeout: incomingClient.Close(); Http2Logger.LogError("Handshake timeout. Client was disconnected."); return; default: incomingClient.Close(); Http2Logger.LogError("Unknown error occurred during secure handshake"); return; } } catch (Exception e) { Http2Logger.LogError("Exception occurred. Closing client's socket. " + e.Message); incomingClient.Close(); return; } } var clientStream = new DuplexStream(incomingClient, true); var transportInfo = GetTransportInfo(incomingClient); monitor.Dispose(); try { HandleRequest(clientStream, selectedProtocol, transportInfo, backToHttp11); } catch (Exception e) { Http2Logger.LogError("Exception occurred. Closing client's socket. " + e.Message); incomingClient.Close(); } }