Skip to content
Snippets Groups Projects
Commit a9ee87ff authored by codecraft's avatar codecraft :crocodile:
Browse files

Add instant graceful shutdown with SIGNIT

parent ab9873ad
No related branches found
No related tags found
1 merge request!1Initial feature merge
......@@ -2,7 +2,7 @@ use std::{
thread::available_parallelism, process::exit,
};
use tokio::{net::TcpListener, signal::unix::{SignalKind, signal}};
use tokio::{net::TcpListener, signal::unix::{SignalKind, signal}, runtime, select};
use crate::{
handlers::handlers::handle_connection,
......@@ -52,18 +52,21 @@ impl<'a> Config {
self
}
pub async fn launch(self) {
// Set up a signal handler for SIGINT
tokio::spawn(async {
let mut sigint = signal(SignalKind::interrupt()).unwrap();
sigint.recv().await;
println!("Shutting down...");
exit(0)
});
let mut sigint = signal(SignalKind::interrupt()).unwrap();
loop {
let (socket, _) = self.address.accept().await.unwrap();
let mountpoints = self.mountpoints.clone().unwrap();
tokio::spawn(async move { handle_connection(socket, mountpoints).await; });
select! {
_ = sigint.recv() => {
println!("Shutting down...");
break;
}
income = self.address.accept() => {
let income = income.unwrap();
let (socket, _) = income;
let mountpoints = self.mountpoints.clone().unwrap();
tokio::spawn(async move { handle_connection(socket, mountpoints).await; });
}
}
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment