aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/main.rs b/src/main.rs
index fbb23e2..ccff659 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -20,10 +20,10 @@
/* 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)) => {