返回具体错误信息

This commit is contained in:
lbl8603
2024-05-21 20:37:55 +08:00
parent 440a832ace
commit faa78445b1
+5 -2
View File
@@ -44,6 +44,7 @@ fn address_choose0(addrs: Vec<SocketAddr>) -> anyhow::Result<SocketAddr> {
let v4: Vec<SocketAddr> = addrs.iter().filter(|v| v.is_ipv4()).copied().collect(); let v4: Vec<SocketAddr> = addrs.iter().filter(|v| v.is_ipv4()).copied().collect();
let v6: Vec<SocketAddr> = addrs.iter().filter(|v| v.is_ipv6()).copied().collect(); let v6: Vec<SocketAddr> = addrs.iter().filter(|v| v.is_ipv6()).copied().collect();
let check_addr = |addrs: &Vec<SocketAddr>| -> anyhow::Result<SocketAddr> { let check_addr = |addrs: &Vec<SocketAddr>| -> anyhow::Result<SocketAddr> {
let mut err = Vec::new();
if !addrs.is_empty() { if !addrs.is_empty() {
let udp = if addrs[0].is_ipv6() { let udp = if addrs[0].is_ipv6() {
UdpSocket::bind("[::]:0")? UdpSocket::bind("[::]:0")?
@@ -51,12 +52,14 @@ fn address_choose0(addrs: Vec<SocketAddr>) -> anyhow::Result<SocketAddr> {
UdpSocket::bind("0.0.0.0:0")? UdpSocket::bind("0.0.0.0:0")?
}; };
for addr in addrs { for addr in addrs {
if udp.connect(addr).is_ok() { if let Err(e) = udp.connect(addr) {
err.push((*addr, e));
} else {
return Ok(*addr); return Ok(*addr);
} }
} }
} }
Err(anyhow::anyhow!("Unable to connect to address {:?}", addrs)) Err(anyhow::anyhow!("Unable to connect to address {:?}", err))
}; };
if v6.is_empty() { if v6.is_empty() {
return check_addr(&v4); return check_addr(&v4);