From a073a9d049c00886934a2a97cff5225045b0010f Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Tue, 13 Oct 2026 21:24:05 +0700 Subject: [PATCH] fix(reflectors): tolerate individual DNS resolution failures Log and skip unresolved reflectors so startup can proceed with usable endpoints. Report an error when none remain for the selected protocol. --- src/main.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 02074e1..cea7a0c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -174,7 +174,14 @@ fn resolve_reflectors( } else { 0 }; - for endpoint in (definition.host.as_str(), port).to_socket_addrs()? { + let endpoints = match (definition.host.as_str(), port).to_socket_addrs() { + Ok(endpoints) => endpoints, + Err(error) => { + warn!("Failed to resolve reflector {}: {error}", definition.host); + continue; + } + }; + for endpoint in endpoints { if protocol != ReflectorProtocol::Irtt && endpoint.is_ipv6() { continue; } @@ -199,6 +206,9 @@ fn setup_reflectors(settings: &Settings) -> anyhow::Result { .iter() .map(|(endpoint, definition)| (*endpoint, definition.clone())), ); + if reflectors.is_empty() { + anyhow::bail!("no usable reflectors for measurement protocol {protocol}"); + } let mut pool = configured.keys().copied().collect::>(); pool.sort(); let mut initial = bootstrap.keys().copied().collect::>();