@@ -27,6 +27,7 @@ use stable::{
27
27
task:: TaskManager ,
28
28
} ;
29
29
use tokio:: io:: { AsyncReadExt , AsyncWriteExt } ;
30
+ use tokio:: net:: TcpListener ;
30
31
use tokio:: process:: Command ;
31
32
use tokio:: sync:: Mutex ;
32
33
@@ -409,6 +410,7 @@ impl AppServer {
409
410
cout. write_all ( & buf[ ..len] ) . await ?;
410
411
}
411
412
413
+ tracing:: info!( "目录传输完成!" ) ;
412
414
cout. shutdown ( ) . await ?;
413
415
handle. eof ( ) . await ?;
414
416
return Ok ( ( ) ) ;
@@ -454,6 +456,7 @@ impl AppServer {
454
456
cout. write_all ( & buf[ ..len] ) . await ?;
455
457
}
456
458
459
+ tracing:: info!( "文件传输完成!" ) ;
457
460
cout. shutdown ( ) . await ?;
458
461
handle. eof ( ) . await ?;
459
462
return Ok ( ( ) ) ;
@@ -1004,6 +1007,7 @@ impl AppServer {
1004
1007
}
1005
1008
}
1006
1009
1010
+ #[ async_trait:: async_trait]
1007
1011
impl Server for AppServer {
1008
1012
type Handler = Self ;
1009
1013
/// 创建新连接
@@ -1016,6 +1020,62 @@ impl Server for AppServer {
1016
1020
fn handle_session_error ( & mut self , error : <Self :: Handler as Handler >:: Error ) {
1017
1021
tracing:: error!( "会话错误: {:?}" , error) ;
1018
1022
}
1023
+
1024
+ async fn run_on_socket (
1025
+ & mut self ,
1026
+ config : Arc < Config > ,
1027
+ socket : & TcpListener ,
1028
+ ) -> Result < ( ) , std:: io:: Error > {
1029
+ if config. maximum_packet_size > 65535 {
1030
+ tracing:: error!(
1031
+ "Maximum packet size ({:?}) should not larger than a TCP packet (65535)" ,
1032
+ config. maximum_packet_size
1033
+ ) ;
1034
+ }
1035
+
1036
+ let ( error_tx, mut error_rx) = tokio:: sync:: mpsc:: unbounded_channel ( ) ;
1037
+ let mut tm = TaskManager :: default ( ) ;
1038
+ let handle = tm. spawn_handle ( ) ;
1039
+
1040
+ loop {
1041
+ tokio:: select! {
1042
+ accept_result = socket. accept( ) => {
1043
+ match accept_result {
1044
+ Ok ( ( socket, _) ) => {
1045
+ let config = config. clone( ) ;
1046
+ let handler = self . new_client( socket. peer_addr( ) . ok( ) ) ;
1047
+ let error_tx = error_tx. clone( ) ;
1048
+ handle. spawn( async move {
1049
+ let session = match run_stream( config, socket, handler) . await {
1050
+ Ok ( s) => s,
1051
+ Err ( e) => {
1052
+ let _ = error_tx. send( e) ;
1053
+ panic!( "Connection setup failed" ) ;
1054
+ }
1055
+ } ;
1056
+ match session. await {
1057
+ Ok ( _) => tracing:: debug!( "Connection closed" ) ,
1058
+ Err ( e) => {
1059
+ tracing:: debug!( "Connection closed with error" ) ;
1060
+ let _ = error_tx. send( e. into( ) ) ;
1061
+ }
1062
+ }
1063
+ Ok ( ( ) )
1064
+ } ) ;
1065
+ }
1066
+ _ => break ,
1067
+ }
1068
+ } ,
1069
+ Some ( error) = error_rx. recv( ) => {
1070
+ self . handle_session_error( error) ;
1071
+ }
1072
+ }
1073
+ }
1074
+
1075
+ tm. terminate ( ) ;
1076
+
1077
+ Ok ( ( ) )
1078
+ }
1019
1079
}
1020
1080
1021
1081
#[ async_trait:: async_trait]
0 commit comments