From 7d0c0250c5b1f80edde35721de914544d824557d Mon Sep 17 00:00:00 2001 From: Jett Chen Date: Sun, 3 Dec 2023 01:27:06 +0800 Subject: [PATCH] Fix async problem remove timeouts --- burrow/src/daemon/mod.rs | 2 +- burrow/src/wireguard/pcb.rs | 14 +++----------- tun/src/unix/mod.rs | 4 ++-- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/burrow/src/daemon/mod.rs b/burrow/src/daemon/mod.rs index bfbc1a2..719bab5 100644 --- a/burrow/src/daemon/mod.rs +++ b/burrow/src/daemon/mod.rs @@ -47,7 +47,7 @@ pub async fn daemon_main() -> Result<()> { let mut _tun = tun::TunInterface::new()?; _tun.set_ipv4_addr(Ipv4Addr::from([192, 168, 1, 10]))?; - _tun.set_timeout(Some(std::time::Duration::from_millis(10)))?; + _tun.set_nonblocking(true)?; let tun = tun::tokio::TunInterface::new(_tun)?; let private_key = parse_secret_key("GNqIAOCRxjl/cicZyvkvpTklgQuUmGUIEkH7IXF/sEE=")?; diff --git a/burrow/src/wireguard/pcb.rs b/burrow/src/wireguard/pcb.rs index 840eda8..2e467b1 100755 --- a/burrow/src/wireguard/pcb.rs +++ b/burrow/src/wireguard/pcb.rs @@ -74,20 +74,12 @@ impl PeerPcb { }; let mut res_buf = [0;1500]; // log::debug!("{} : waiting for readability on {:?}", rid, socket); - match timeout(Duration::from_millis(10), socket.readable()).await { + let len = match socket.recv(&mut res_buf).await { + Ok(l) => {l} Err(e) => { - // log::debug!("{}: timeout waiting for readability on {:?}", rid, e); + log::error!("{}: error reading from socket: {:?}", rid, e); continue } - Ok(Err(e)) => { - log::debug!("{}: error waiting for readability on {:?}", rid, e); - continue - } - Ok(Ok(_)) => {} - }; - log::debug!("{}: readable!", rid); - let Ok(len) = socket.try_recv(&mut res_buf) else { - continue }; let mut res_dat = &res_buf[..len]; tracing::debug!("{}: Decapsulating {} bytes", rid, len); diff --git a/tun/src/unix/mod.rs b/tun/src/unix/mod.rs index 407d425..bd9ffb4 100644 --- a/tun/src/unix/mod.rs +++ b/tun/src/unix/mod.rs @@ -53,8 +53,8 @@ impl TunInterface { #[throws] #[instrument] - pub fn set_timeout(&self, timeout: Option) { - self.socket.set_read_timeout(timeout)?; + pub fn set_nonblocking(&mut self, nb: bool) { + self.socket.set_nonblocking(nb)?; } }