diff --git a/libs/hbb_common/src/socket_client.rs b/libs/hbb_common/src/socket_client.rs index 0375b713e..efea489a4 100644 --- a/libs/hbb_common/src/socket_client.rs +++ b/libs/hbb_common/src/socket_client.rs @@ -11,7 +11,10 @@ use tokio_socks::{IntoTargetAddr, TargetAddr}; fn to_socket_addr(host: &str) -> ResultType { use std::net::ToSocketAddrs; - host.to_socket_addrs()?.next().context("Failed to solve") + host.to_socket_addrs()? + .filter(|x| x.is_ipv4()) + .next() + .context("Failed to solve") } pub fn get_target_addr(host: &str) -> ResultType> { @@ -60,6 +63,7 @@ pub async fn connect_tcp<'t, T: IntoTargetAddr<'t>>( .await } else { let addr = std::net::ToSocketAddrs::to_socket_addrs(&target_addr)? + .filter(|x| x.is_ipv4()) .next() .context("Invalid target addr")?; Ok(FramedStream::new(addr, local, ms_timeout).await?) diff --git a/libs/hbb_common/src/udp.rs b/libs/hbb_common/src/udp.rs index 033861800..4213392a5 100644 --- a/libs/hbb_common/src/udp.rs +++ b/libs/hbb_common/src/udp.rs @@ -47,7 +47,7 @@ impl FramedSocket { #[allow(clippy::never_loop)] pub async fn new_reuse(addr: T) -> ResultType { - for addr in addr.to_socket_addrs()? { + for addr in addr.to_socket_addrs()?.filter(|x| x.is_ipv4()) { let socket = new_socket(addr, true, 0)?.into_udp_socket(); return Ok(Self::Direct(UdpFramed::new( UdpSocket::from_std(socket)?, @@ -61,7 +61,7 @@ impl FramedSocket { addr: T, buf_size: usize, ) -> ResultType { - for addr in addr.to_socket_addrs()? { + for addr in addr.to_socket_addrs()?.filter(|x| x.is_ipv4()) { return Ok(Self::Direct(UdpFramed::new( UdpSocket::from_std(new_socket(addr, false, buf_size)?.into_udp_socket())?, BytesCodec::new(),