diff --git a/rust-zerotier-service/src/weblistener.rs b/rust-zerotier-service/src/weblistener.rs index 070057798..7b3df9852 100644 --- a/rust-zerotier-service/src/weblistener.rs +++ b/rust-zerotier-service/src/weblistener.rs @@ -24,6 +24,7 @@ use hyper::server::Server; use hyper::service::{make_service_fn, service_fn}; use net2::TcpBuilder; #[cfg(unix)] use net2::unix::UnixTcpBuilderExt; +use tokio::task::JoinHandle; use zerotier_core::InetAddress; @@ -37,7 +38,7 @@ async fn web_handler(service: Service, req: Request) -> Result>>, - server: Box, + server: JoinHandle>, } impl WebListener { @@ -87,7 +88,7 @@ impl WebListener { let (shutdown_tx, shutdown_rx) = tokio::sync::oneshot::channel::<()>(); let service = service.clone(); - let server = builder.serve(make_service_fn(move |_| { + let server = tokio::task::spawn(builder.serve(make_service_fn(move |_| { let service = service.clone(); async move { Ok::<_, Infallible>(service_fn(move |req: Request| { @@ -97,11 +98,11 @@ impl WebListener { } })) } - })).with_graceful_shutdown(async { let _ = shutdown_rx.await; }); + })).with_graceful_shutdown(async { let _ = shutdown_rx.await; })); Ok(WebListener { shutdown_tx: RefCell::new(Some(shutdown_tx)), - server: Box::new(server), + server, }) } } @@ -109,5 +110,6 @@ impl WebListener { impl Drop for WebListener { fn drop(&mut self) { let _ = self.shutdown_tx.take().map(|tx| { tx.send(()); }); + self.server.abort(); } }