diff --git a/axum/src/serve/mod.rs b/axum/src/serve/mod.rs index ec7ab49a..089053f7 100644 --- a/axum/src/serve/mod.rs +++ b/axum/src/serve/mod.rs @@ -191,7 +191,15 @@ where loop { let (io, remote_addr) = listener.accept().await; - handle_connection(&mut make_service, &signal_tx, &close_rx, io, remote_addr).await; + let io = TokioIo::new(io); + + let conn_service = prep_serve_connection(&mut make_service, remote_addr, &io).await; + tokio::spawn(serve_connection( + io, + conn_service, + signal_tx.clone(), + close_rx.clone(), + )); } } } @@ -293,8 +301,15 @@ where break; } }; + let io = TokioIo::new(io); - handle_connection(&mut make_service, &signal_tx, &close_rx, io, remote_addr).await; + let conn_service = prep_serve_connection(&mut make_service, remote_addr, &io).await; + tokio::spawn(serve_connection( + io, + conn_service, + signal_tx.clone(), + close_rx.clone(), + )); } drop(close_rx); @@ -352,31 +367,6 @@ where } } -async fn handle_connection( - make_service: &mut M, - signal_tx: &watch::Sender<()>, - close_rx: &watch::Receiver<()>, - io: ::Io, - remote_addr: ::Addr, -) where - L: Listener, - L::Addr: Debug, - M: for<'a> Service, Error = Infallible, Response = S> + Send + 'static, - for<'a> >>::Future: Send, - S: Service + Clone + Send + 'static, - S::Future: Send, -{ - let io = TokioIo::new(io); - - let conn_service = prep_serve_connection(make_service, remote_addr, &io).await; - tokio::spawn(serve_connection( - io, - conn_service, - signal_tx.clone(), - close_rx.clone(), - )); -} - async fn prep_serve_connection( make_service: &mut M, remote_addr: ::Addr,