@@ -397,9 +397,22 @@ impl MiniAgent {
397397 let conn = hyper_util:: rt:: TokioIo :: new ( conn) ;
398398 let server = server. clone ( ) ;
399399 let service = service. clone ( ) ;
400+ let mut conn_shutdown = shutdown_rx. clone ( ) ;
400401 joinset. spawn ( async move {
401- if let Err ( e) = server. serve_connection ( conn, service) . await {
402- error ! ( "TCP connection error: {e}" ) ;
402+ let conn = server. serve_connection ( conn, service) ;
403+ tokio:: pin!( conn) ;
404+ tokio:: select! {
405+ result = conn. as_mut( ) => {
406+ if let Err ( e) = result {
407+ error!( "TCP connection error: {e}" ) ;
408+ }
409+ }
410+ _ = conn_shutdown. changed( ) => {
411+ conn. as_mut( ) . graceful_shutdown( ) ;
412+ if let Err ( e) = conn. await {
413+ error!( "TCP connection error during graceful shutdown: {e}" ) ;
414+ }
415+ }
403416 }
404417 } ) ;
405418 }
@@ -484,9 +497,22 @@ impl MiniAgent {
484497 let conn = hyper_util:: rt:: TokioIo :: new ( conn) ;
485498 let server = server. clone ( ) ;
486499 let service = service. clone ( ) ;
500+ let mut conn_shutdown = shutdown_rx. clone ( ) ;
487501 joinset. spawn ( async move {
488- if let Err ( e) = server. serve_connection ( conn, service) . await {
489- error ! ( "Named pipe connection error: {e}" ) ;
502+ let conn = server. serve_connection ( conn, service) ;
503+ tokio:: pin!( conn) ;
504+ tokio:: select! {
505+ result = conn. as_mut( ) => {
506+ if let Err ( e) = result {
507+ error!( "Named pipe connection error: {e}" ) ;
508+ }
509+ }
510+ _ = conn_shutdown. changed( ) => {
511+ conn. as_mut( ) . graceful_shutdown( ) ;
512+ if let Err ( e) = conn. await {
513+ error!( "Named pipe connection error during graceful shutdown: {e}" ) ;
514+ }
515+ }
490516 }
491517 } ) ;
492518 }
0 commit comments