diff options
| author | Scott Lawrence <scott+git@ineffectivetheory.com> | 2024-11-27 22:49:58 -0700 |
|---|---|---|
| committer | Scott Lawrence <scott+git@ineffectivetheory.com> | 2024-11-27 22:49:58 -0700 |
| commit | 87298226d0033a2db699d5bb6b1e1dbd7960c04a (patch) | |
| tree | 243f1ad347fd7d4f6aff1656016679cc67a96033 /src/main.rs | |
| parent | 3dd4c3c6f3c876a2128f0153794412d35a37f1bd (diff) | |
| download | varanus-87298226d0033a2db699d5bb6b1e1dbd7960c04a.tar.gz varanus-87298226d0033a2db699d5bb6b1e1dbd7960c04a.tar.bz2 varanus-87298226d0033a2db699d5bb6b1e1dbd7960c04a.zip | |
Removing socket on exit
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 23 |
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)) => { |
