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();
}
}