From f97a47f62558fbc13f1710be55e05ccabdd8e432 Mon Sep 17 00:00:00 2001 From: sigoden Date: Wed, 20 May 2026 09:28:00 +0800 Subject: [PATCH] refactor: handle unspecified ip addrs in check_addrs (#708) --- src/main.rs | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/main.rs b/src/main.rs index f57381f..172cab4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -211,28 +211,31 @@ fn create_listener(addr: SocketAddr) -> Result { fn check_addrs(args: &Args) -> Result<(Vec, Vec)> { let mut new_addrs = vec![]; let mut print_addrs = vec![]; - let (ipv4_addrs, ipv6_addrs) = interface_addrs()?; + let has_unspecified = args + .addrs + .iter() + .any(|a| matches!(a, BindAddr::IpAddr(ip) if ip.is_unspecified())); + let (ipv4_addrs, ipv6_addrs) = if has_unspecified { + interface_addrs()? + } else { + (vec![], vec![]) + }; for bind_addr in args.addrs.iter() { + new_addrs.push(bind_addr.clone()); match bind_addr { BindAddr::IpAddr(ip) => match &ip { IpAddr::V4(_) => { - if !ipv4_addrs.is_empty() { - new_addrs.push(bind_addr.clone()); - if ip.is_unspecified() { - print_addrs.extend(ipv4_addrs.clone()); - } else { - print_addrs.push(bind_addr.clone()); - } + if ip.is_unspecified() { + print_addrs.extend(ipv4_addrs.clone()); + } else { + print_addrs.push(bind_addr.clone()); } } IpAddr::V6(_) => { - if !ipv6_addrs.is_empty() { - new_addrs.push(bind_addr.clone()); - if ip.is_unspecified() { - print_addrs.extend(ipv6_addrs.clone()); - } else { - print_addrs.push(bind_addr.clone()) - } + if ip.is_unspecified() { + print_addrs.extend(ipv6_addrs.clone()); + } else { + print_addrs.push(bind_addr.clone()); } } },