@@ -21,7 +21,7 @@ use ironrdp_pdu::{decode_err, mcs, nego, rdp, Action, PduResult};
2121use ironrdp_svc:: { server_encode_svc_messages, StaticChannelId , StaticChannelSet , SvcProcessor } ;
2222use ironrdp_tokio:: { split_tokio_framed, unsplit_tokio_framed, FramedRead , FramedWrite , TokioFramed } ;
2323use rdpsnd:: server:: { RdpsndServer , RdpsndServerMessage } ;
24- use tokio:: io:: { AsyncRead , AsyncWrite } ;
24+ use tokio:: io:: { AsyncRead , AsyncWrite , AsyncWriteExt as _ } ;
2525use tokio:: net:: { TcpListener , TcpStream } ;
2626use tokio:: sync:: { mpsc, oneshot, Mutex } ;
2727use tokio:: task;
@@ -357,7 +357,12 @@ impl RdpServer {
357357 . await ?;
358358 }
359359
360- self . accept_finalize ( framed, acceptor) . await ?;
360+ let framed = self . accept_finalize ( framed, acceptor) . await ?;
361+ debug ! ( "Shutting down TLS connection" ) ;
362+ let ( mut tls_stream, _) = framed. into_inner ( ) ;
363+ if let Err ( e) = tls_stream. shutdown ( ) . await {
364+ debug ! ( ?e, "TLS shutdown error" ) ;
365+ }
361366 }
362367
363368 BeginResult :: Continue ( framed) => {
@@ -954,7 +959,7 @@ impl RdpServer {
954959 }
955960 }
956961
957- async fn accept_finalize < S > ( & mut self , mut framed : TokioFramed < S > , mut acceptor : Acceptor ) -> Result < ( ) >
962+ async fn accept_finalize < S > ( & mut self , mut framed : TokioFramed < S > , mut acceptor : Acceptor ) -> Result < TokioFramed < S > >
958963 where
959964 S : AsyncRead + AsyncWrite + Sync + Send + Unpin ,
960965 {
@@ -982,11 +987,12 @@ impl RdpServer {
982987 framed = unsplit_tokio_framed ( reader, writer) ;
983988 continue ;
984989 }
985- RunState :: Disconnect => break ,
990+ RunState :: Disconnect => {
991+ let final_framed = unsplit_tokio_framed ( reader, writer) ;
992+ return Ok ( final_framed) ;
993+ }
986994 }
987995 }
988-
989- Ok ( ( ) )
990996 }
991997
992998 pub fn set_credentials ( & mut self , creds : Option < Credentials > ) {
0 commit comments