From b18f08e8899b5a98dd3e1f8439ad812951a04cd9 Mon Sep 17 00:00:00 2001 From: Ashelyn Rose Date: Fri, 21 Mar 2025 23:15:01 -0600 Subject: Container --- src/main.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 51b2531..ea22824 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +use tokio::signal; + #[cfg(feature = "ssr")] #[tokio::main] async fn main() { @@ -26,10 +28,36 @@ async fn main() { log!("listening on http://{}", &addr); let listener = tokio::net::TcpListener::bind(&addr).await.unwrap(); axum::serve(listener, app.into_make_service()) + .with_graceful_shutdown(shutdown_signal()) .await .unwrap(); } +#[cfg(feature = "ssr")] +async fn shutdown_signal() { + let ctrl_c = async { + signal::ctrl_c() + .await + .expect("could not install SIGINT handler") + }; + + #[cfg(unix)] + let terminate = async { + signal::unix::signal(signal::unix::SignalKind::terminate()) + .expect("could not install SIGTERM handler") + .recv() + .await; + }; + + #[cfg(not(unix))] + let terminate = std::future::pending::<()>(); + + tokio::select! { + _ = ctrl_c => {}, + _ = terminate => {}, + } +} + #[cfg(not(feature = "ssr"))] pub fn main() { // no client-side main function -- cgit 1.4.1