rustdesk 2022-06-12 15:39:58 +08:00
parent b83b296234
commit 933578e660
2 changed files with 7 additions and 3 deletions

View File

@ -11,7 +11,10 @@ use tokio_socks::{IntoTargetAddr, TargetAddr};
fn to_socket_addr(host: &str) -> ResultType<SocketAddr> { fn to_socket_addr(host: &str) -> ResultType<SocketAddr> {
use std::net::ToSocketAddrs; 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<TargetAddr<'static>> { pub fn get_target_addr(host: &str) -> ResultType<TargetAddr<'static>> {
@ -60,6 +63,7 @@ pub async fn connect_tcp<'t, T: IntoTargetAddr<'t>>(
.await .await
} else { } else {
let addr = std::net::ToSocketAddrs::to_socket_addrs(&target_addr)? let addr = std::net::ToSocketAddrs::to_socket_addrs(&target_addr)?
.filter(|x| x.is_ipv4())
.next() .next()
.context("Invalid target addr")?; .context("Invalid target addr")?;
Ok(FramedStream::new(addr, local, ms_timeout).await?) Ok(FramedStream::new(addr, local, ms_timeout).await?)

View File

@ -47,7 +47,7 @@ impl FramedSocket {
#[allow(clippy::never_loop)] #[allow(clippy::never_loop)]
pub async fn new_reuse<T: std::net::ToSocketAddrs>(addr: T) -> ResultType<Self> { pub async fn new_reuse<T: std::net::ToSocketAddrs>(addr: T) -> ResultType<Self> {
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(); let socket = new_socket(addr, true, 0)?.into_udp_socket();
return Ok(Self::Direct(UdpFramed::new( return Ok(Self::Direct(UdpFramed::new(
UdpSocket::from_std(socket)?, UdpSocket::from_std(socket)?,
@ -61,7 +61,7 @@ impl FramedSocket {
addr: T, addr: T,
buf_size: usize, buf_size: usize,
) -> ResultType<Self> { ) -> ResultType<Self> {
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( return Ok(Self::Direct(UdpFramed::new(
UdpSocket::from_std(new_socket(addr, false, buf_size)?.into_udp_socket())?, UdpSocket::from_std(new_socket(addr, false, buf_size)?.into_udp_socket())?,
BytesCodec::new(), BytesCodec::new(),