From 87298226d0033a2db699d5bb6b1e1dbd7960c04a Mon Sep 17 00:00:00 2001 From: Scott Lawrence Date: Wed, 27 Nov 2024 22:49:58 -0700 Subject: Removing socket on exit --- src/main.rs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index fbb23e2..ccff659 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,11 +19,11 @@ */ /* TODO - * - * Remove socket file when daemon exits. * * Accept command-line arguments to query only part of JSON. (Maybe also a formatting string?) * + * Forecast + * */ use std::error; @@ -37,6 +37,9 @@ use std::time::{Duration,Instant,SystemTime}; use clap::Parser; use serde::{Serialize,Deserialize}; +use signal_hook::{consts::SIGINT, iterator::Signals}; + +mod forecast; #[derive(Default)] #[repr(C)] @@ -180,10 +183,20 @@ impl Listener { fn listen(&self) { let state_mutex = Arc::clone(&self.state); - let sfn = self.file.clone(); + let sfn1 = self.file.clone(); + let sfn2 = self.file.clone(); + spawn(move || { + match Signals::new([SIGINT]) { + Ok(mut signals) => for _sig in signals.forever() { + let _ = remove_file(&sfn1); + std::process::exit(0) + }, + Err(_) => () + } + }); spawn(move || { - let _ = remove_file(&sfn); - let listener = UnixListener::bind(sfn).unwrap(); + let _ = remove_file(&sfn2); + let listener = UnixListener::bind(sfn2).unwrap(); loop { match listener.accept() { Ok((mut socket,accept)) => { -- cgit v1.2.3-54-g00ecf