@@ -441,30 +441,46 @@ private void constructorTryBlock(Socket socket, HttpServer server, bool secure)
441441 server . _activeConnectionHandlers . Add ( this ) ;
442442
443443 _stream = new NetworkStream ( socket , ownsSocket : true ) ;
444- if ( _secure )
444+ if ( ! _secure )
445+ receiveMoreHeaderData ( ) ;
446+ else if ( _server . PropagateExceptions )
447+ beginAuthenticateAsServer ( server ) ;
448+ else
445449 {
446- var sniReader = new SniReaderStream ( _stream ) ;
447- var sniHost = sniReader . PeekAtSniHost ( ) ;
448- var secureStream = new SslStream ( sniReader ) ;
449- _stream = secureStream ;
450-
451- secureStream . BeginAuthenticateAsServer (
452- // Select the most appropriate certificate
453- serverCertificate : server . Options . CertificateResolver ? . Invoke ( sniHost )
454- ?? server . Options . Certificates ? . Get ( sniHost , null ) ? . GetCertificate ( )
455- ?? server . Options . Certificate ? . GetCertificate ( ) ,
456- enabledSslProtocols : SslProtocols . Tls | SslProtocols . Tls11 | SslProtocols . Tls12 ,
457- clientCertificateRequired : false ,
458- checkCertificateRevocation : true ,
459- asyncState : null ,
460- asyncCallback : ar =>
461- {
462- if ( _server . PropagateExceptions )
463- {
464- asyncCallbackTryBlock ( ar , secureStream ) ;
465- return ;
466- }
450+ try
451+ {
452+ beginAuthenticateAsServer ( server ) ;
453+ }
454+ catch ( Exception e )
455+ {
456+ _server . Log . Exception ( e ) ;
457+ try { Socket . Close ( ) ; } catch { }
458+ }
459+ }
460+ }
467461
462+ private void beginAuthenticateAsServer ( HttpServer server )
463+ {
464+ var sniReader = new SniReaderStream ( _stream ) ;
465+ var sniHost = sniReader . PeekAtSniHost ( ) ;
466+ var secureStream = new SslStream ( sniReader ) ;
467+ _stream = secureStream ;
468+
469+ secureStream . BeginAuthenticateAsServer (
470+ // Select the most appropriate certificate
471+ serverCertificate : server . Options . CertificateResolver ? . Invoke ( sniHost )
472+ ?? server . Options . Certificates ? . Get ( sniHost , null ) ? . GetCertificate ( )
473+ ?? server . Options . Certificate ? . GetCertificate ( ) ,
474+ enabledSslProtocols : SslProtocols . Tls | SslProtocols . Tls11 | SslProtocols . Tls12 ,
475+ clientCertificateRequired : false ,
476+ checkCertificateRevocation : true ,
477+ asyncState : null ,
478+ asyncCallback : ar =>
479+ {
480+ if ( _server . PropagateExceptions )
481+ asyncCallbackTryBlock ( ar , secureStream ) ;
482+ else
483+ {
468484 try
469485 {
470486 asyncCallbackTryBlock ( ar , secureStream ) ;
@@ -475,15 +491,10 @@ private void constructorTryBlock(Socket socket, HttpServer server, bool secure)
475491 // unexpected SocketExceptions; some of the code can cause RemotingExceptions when the handler
476492 // runs in another AppDomain; etc.
477493 _server . Log . Exception ( e ) ;
478-
479494 try { Socket . Close ( ) ; } catch { }
480495 }
481- } ) ;
482- }
483- else
484- {
485- receiveMoreHeaderData ( ) ;
486- }
496+ }
497+ } ) ;
487498 }
488499
489500 private void asyncCallbackTryBlock ( IAsyncResult ar , SslStream secureStream )
0 commit comments