From a1dbc6dc5a080fd2023dbf3f741e841594842646 Mon Sep 17 00:00:00 2001 From: Siavash Sameni Date: Tue, 31 Mar 2026 18:54:45 +0400 Subject: [PATCH] Fix client IPv6 UDP: use SocketAddr::new() and bind to [::] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same fix as server side — format!("{}:{}", ipv6, port) fails. Use SocketAddr::new() for IPv6 and bind to [::] instead of 0.0.0.0. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/client.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/client.rs b/src/client.rs index e063994..ba99bf9 100644 --- a/src/client.rs +++ b/src/client.rs @@ -213,9 +213,19 @@ async fn run_udp_test_client( server_udp_port, client_udp_port, ); - let udp = UdpSocket::bind(format!("0.0.0.0:{}", client_udp_port)).await?; - let server_udp_addr: SocketAddr = - format!("{}:{}", host, server_udp_port).parse().unwrap(); + // Detect IPv6 from the host address + let is_ipv6 = host.contains(':'); + let bind_addr: SocketAddr = if is_ipv6 { + format!("[::]:{}", client_udp_port).parse().unwrap() + } else { + format!("0.0.0.0:{}", client_udp_port).parse().unwrap() + }; + let udp = UdpSocket::bind(bind_addr).await?; + let server_udp_addr = if is_ipv6 { + SocketAddr::new(host.parse().unwrap(), server_udp_port) + } else { + format!("{}:{}", host, server_udp_port).parse().unwrap() + }; udp.connect(server_udp_addr).await?; if nat_mode {