Handle poll interrupt gracefully

This commit is contained in:
B. Blechschmidt 2023-03-24 18:11:04 +01:00
parent 280073ebfe
commit 8135ed3dce

View file

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