diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2022-10-27 19:17:33 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2022-10-27 19:17:33 +0200 |
commit | 40b3398b7d56006568ceb9eae7bc2d30676885f0 (patch) | |
tree | 72466ddf4b191fec04f4d89a4a934c5e50b2dc4d | |
parent | 7de152bcc611fff31a6265a931b123f62ff76890 (diff) |
further improve error handling and robustness
-rw-r--r-- | src/main.rs | 78 |
1 files changed, 40 insertions, 38 deletions
diff --git a/src/main.rs b/src/main.rs index 63f3ba4..a576e79 100644 --- a/src/main.rs +++ b/src/main.rs @@ -109,33 +109,57 @@ fn main() -> Result<()> { let (tx6, rx6) = mpsc::channel(); let push4_thread = thread::spawn(move || { - push4(config0, rx4)?; - Ok::<(), Error>(()) + loop { + match push4(config0.clone(), &rx4) { + Ok(_) => { /* unreachable */ } + Err(e) => println!("failed to push ipv4 address: {}", e), + } + + thread::sleep(config0.interval4); + } }); let push6_thread = thread::spawn(move || { - push6(config1, rx6)?; - Ok::<(), Error>(()) + loop { + match push6(config1.clone(), &rx6) { + Ok(_) => { /* unreachable */ } + Err(e) => println!("failed to push ipv6 prefix: {}", e), + } + + thread::sleep(config1.interval6); + } }); let monitor4_thread = thread::spawn(move || { - monitor4(config2, tx4)?; - Ok::<(), Error>(()) + loop { + match monitor4(config2.clone(), tx4.clone()) { + Ok(_) => { /* unreachable */ } + Err(e) => println!("failed to monitor ipv4 address: {}", e), + } + + thread::sleep(config2.interval4); + } }); let monitor6_thread = thread::spawn(move || { - monitor6(config3, tx6)?; - Ok::<(), Error>(()) + loop { + match monitor6(config3.clone(), tx6.clone()) { + Ok(_) => { /* unreachable */ } + Err(e) => println!("failed to monitor ipv6 prefix: {}", e), + } + + thread::sleep(config3.interval6); + } }); - push4_thread.join().unwrap()?; - push6_thread.join().unwrap()?; + push4_thread.join().unwrap(); + push6_thread.join().unwrap(); - monitor4_thread.join().unwrap()?; - monitor6_thread.join().unwrap()?; + monitor4_thread.join().unwrap(); + monitor6_thread.join().unwrap(); Ok(()) } -fn check_for_addrs4(config: Arc<Config>, tx: mpsc::Sender<Ipv4Addr>) -> Result<Ipv4Addr> { +fn monitor4(config: Arc<Config>, tx: mpsc::Sender<Ipv4Addr>) -> Result<()> { let mut ipv4 = None; loop { @@ -150,7 +174,7 @@ fn check_for_addrs4(config: Arc<Config>, tx: mpsc::Sender<Ipv4Addr>) -> Result<I } } -fn check_for_addrs6(config: Arc<Config>, tx: mpsc::Sender<Ipv6Addr>) -> Result<Ipv6Addr> { +fn monitor6(config: Arc<Config>, tx: mpsc::Sender<Ipv6Addr>) -> Result<()> { let mut ipv6 = None; loop { @@ -165,29 +189,7 @@ fn check_for_addrs6(config: Arc<Config>, tx: mpsc::Sender<Ipv6Addr>) -> Result<I } } -fn monitor4(config: Arc<Config>, tx: mpsc::Sender<Ipv4Addr>) -> Result<()> { - loop { - match check_for_addrs4(config.clone(), tx.clone()) { - Ok(_) => { /* unreachable */ } - Err(e) => println!("{}", e), - } - - thread::sleep(config.interval4); - } -} - -fn monitor6(config: Arc<Config>, tx: mpsc::Sender<Ipv6Addr>) -> Result<()> { - loop { - match check_for_addrs6(config.clone(), tx.clone()) { - Ok(_) => { /* unreachable */ } - Err(e) => println!("{}", e), - } - - thread::sleep(config.interval6); - } -} - -fn push4(config: Arc<Config>, rx: mpsc::Receiver<Ipv4Addr>) -> Result<()> { +fn push4(config: Arc<Config>, rx: &mpsc::Receiver<Ipv4Addr>) -> Result<()> { let mut last_address = None; loop { let address = rx.recv()?; @@ -215,7 +217,7 @@ fn push4(config: Arc<Config>, rx: mpsc::Receiver<Ipv4Addr>) -> Result<()> { } } -fn push6(config: Arc<Config>, rx: mpsc::Receiver<Ipv6Addr>) -> Result<()> { +fn push6(config: Arc<Config>, rx: &mpsc::Receiver<Ipv6Addr>) -> Result<()> { let mut last_prefix = None; loop { let prefix = rx.recv()?; |