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()?; } } }