From 6d7edcd486a32b7d6414594e0244d1231273e562 Mon Sep 17 00:00:00 2001 From: "sijie.sun" Date: Wed, 18 Sep 2024 22:12:21 +0800 Subject: [PATCH] fix connect failed after setup one of sockets fails --- easytier/src/tunnel/tcp.rs | 6 +++++- easytier/src/tunnel/udp.rs | 5 ++++- easytier/src/tunnel/websocket.rs | 6 +++++- easytier/src/tunnel/wireguard.rs | 13 +++++++++++-- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/easytier/src/tunnel/tcp.rs b/easytier/src/tunnel/tcp.rs index d8c8396..fc9d5d6 100644 --- a/easytier/src/tunnel/tcp.rs +++ b/easytier/src/tunnel/tcp.rs @@ -139,7 +139,11 @@ impl TcpTunnelConnector { socket2::Type::STREAM, Some(socket2::Protocol::TCP), )?; - setup_sokcet2(&socket2_socket, bind_addr)?; + + if let Err(e) = setup_sokcet2(&socket2_socket, bind_addr) { + tracing::error!(bind_addr = ?bind_addr, ?addr, "bind addr fail: {:?}", e); + continue; + } let socket = TcpSocket::from_std_stream(socket2_socket.into()); futures.push(socket.connect(addr.clone())); diff --git a/easytier/src/tunnel/udp.rs b/easytier/src/tunnel/udp.rs index 6e7da49..639be1b 100644 --- a/easytier/src/tunnel/udp.rs +++ b/easytier/src/tunnel/udp.rs @@ -673,7 +673,10 @@ impl UdpTunnelConnector { socket2::Type::DGRAM, Some(socket2::Protocol::UDP), )?; - setup_sokcet2(&socket2_socket, &bind_addr)?; + if let Err(e) = setup_sokcet2(&socket2_socket, bind_addr) { + tracing::error!(bind_addr = ?bind_addr, ?addr, "bind addr fail: {:?}", e); + continue; + } let socket = UdpSocket::from_std(socket2_socket.into())?; futures.push(self.try_connect_with_socket(Arc::new(socket), addr)); } diff --git a/easytier/src/tunnel/websocket.rs b/easytier/src/tunnel/websocket.rs index 2102e47..5d7c07a 100644 --- a/easytier/src/tunnel/websocket.rs +++ b/easytier/src/tunnel/websocket.rs @@ -241,7 +241,11 @@ impl WSTunnelConnector { socket2::Type::STREAM, Some(socket2::Protocol::TCP), )?; - setup_sokcet2(&socket2_socket, bind_addr)?; + + if let Err(e) = setup_sokcet2(&socket2_socket, bind_addr) { + tracing::error!(bind_addr = ?bind_addr, ?addr, "bind addr fail: {:?}", e); + continue; + } let socket = TcpSocket::from_std_stream(socket2_socket.into()); futures.push(Self::connect_with( diff --git a/easytier/src/tunnel/wireguard.rs b/easytier/src/tunnel/wireguard.rs index b150d5c..8e418a7 100644 --- a/easytier/src/tunnel/wireguard.rs +++ b/easytier/src/tunnel/wireguard.rs @@ -722,8 +722,17 @@ impl super::TunnelConnector for WgTunnelConnector { socket2::Type::DGRAM, Some(socket2::Protocol::UDP), )?; - setup_sokcet2(&socket2_socket, &bind_addr)?; - let socket = UdpSocket::from_std(socket2_socket.into())?; + if let Err(e) = setup_sokcet2(&socket2_socket, &bind_addr) { + tracing::error!(bind_addr = ?bind_addr, ?addr, "bind addr fail: {:?}", e); + continue; + } + let socket = match UdpSocket::from_std(socket2_socket.into()) { + Ok(s) => s, + Err(e) => { + tracing::error!(bind_addr = ?bind_addr, ?addr, "create udp socket fail: {:?}", e); + continue; + } + }; tracing::info!(?bind_addr, ?self.addr, "prepare wg connect task"); futures.push(Self::connect_with_socket( self.addr.clone(),