From 8135ed3dce133a03ba68cdca46571c2eaabc3f53 Mon Sep 17 00:00:00 2001 From: "B. Blechschmidt" Date: Fri, 24 Mar 2023 18:11:04 +0100 Subject: [PATCH] Handle poll interrupt gracefully --- src/tun2proxy.rs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/tun2proxy.rs b/src/tun2proxy.rs index d6637d8..69709da 100644 --- a/src/tun2proxy.rs +++ b/src/tun2proxy.rs @@ -673,15 +673,23 @@ impl<'a> TunToProxy<'a> { let mut events = Events::with_capacity(1024); loop { - self.poll.poll(&mut events, None)?; - for event in events.iter() { - match event.token() { - TCP_TOKEN => self.tun_event(event)?, - UDP_TOKEN => self.udp_event(event), - _ => self.mio_socket_event(event)?, + match self.poll.poll(&mut events, None) { + Ok(()) => { + for event in events.iter() { + match event.token() { + TCP_TOKEN => self.tun_event(event)?, + UDP_TOKEN => self.udp_event(event), + _ => self.mio_socket_event(event)?, + } + } + self.send_to_smoltcp()?; + } + Err(e) => { + if e.kind() != std::io::ErrorKind::Interrupted { + return Err(e.into()) + } } } - self.send_to_smoltcp()?; } } }