Extend IPv6 STUN connect error handling to cover more unreachable cases

In addition to ENETUNREACH, also treat HostUnreachable, Unsupported
and NetworkDown as non-fatal when probing IPv6 — all indicate the
family is unavailable. Guard is limited to IpFamily::V6 so any IPv4
connect failure still propagates as an error.
This commit is contained in:
ivulit 2026-02-19 00:15:42 +03:00
parent 17b3c612a1
commit 1a07991508
No known key found for this signature in database
1 changed files with 7 additions and 1 deletions

View File

@ -52,7 +52,13 @@ pub async fn stun_probe_family(stun_addr: &str, family: IpFamily) -> Result<Opti
if let Some(addr) = target_addr { if let Some(addr) = target_addr {
match socket.connect(addr).await { match socket.connect(addr).await {
Ok(()) => {} Ok(()) => {}
Err(e) if e.kind() == std::io::ErrorKind::NetworkUnreachable => return Ok(None), Err(e) if family == IpFamily::V6 && matches!(
e.kind(),
std::io::ErrorKind::NetworkUnreachable
| std::io::ErrorKind::HostUnreachable
| std::io::ErrorKind::Unsupported
| std::io::ErrorKind::NetworkDown
) => return Ok(None),
Err(e) => return Err(ProxyError::Proxy(format!("STUN connect failed: {e}"))), Err(e) => return Err(ProxyError::Proxy(format!("STUN connect failed: {e}"))),
} }
} else { } else {