diff --git a/src/cloud.rs b/src/cloud.rs index 73ed2f7..4106e89 100644 --- a/src/cloud.rs +++ b/src/cloud.rs @@ -373,8 +373,14 @@ impl GenericCloud entry.resolved = addrs, + Err(_) => { + match resolve(&format!("{}:{}", address, DEFAULT_PORT)) { + Ok(addrs) => entry.resolved = addrs, + Err(err) => warn!("Failed to resolve {}: {}", address, err) + } + } } *next_resolve = now + RESOLVE_INTERVAL; } diff --git a/src/util.rs b/src/util.rs index f14278f..bbd4dfd 100644 --- a/src/util.rs +++ b/src/util.rs @@ -13,8 +13,8 @@ use crate::error::Error; #[cfg(not(target_os = "linux"))] use time; use signal::{trap::Trap, Signal}; -use std::time::Instant; use smallvec::SmallVec; +use std::time::Instant; pub type Duration = u32; @@ -218,9 +218,8 @@ pub fn get_internal_ip() -> Ipv4Addr { #[allow(unknown_lints, clippy::needless_pass_by_value)] pub fn resolve(addr: Addr) -> Result, Error> { - let addrs = addr.to_socket_addrs().map_err(|_| Error::NameUnresolvable(format!("{:?}", addr)))?; - // Remove duplicates in addrs (why are there duplicates???) - let mut addrs = addrs.collect::>(); + let mut addrs = + addr.to_socket_addrs().map_err(|_| Error::NameUnresolvable(format!("{:?}", addr)))?.collect::>(); // Try IPv4 first as it usually is faster addrs.sort_by_key(|addr| { match *addr { @@ -228,6 +227,7 @@ pub fn resolve(addr: Addr) -> Result 6 } }); + // Remove duplicates in addrs (why are there duplicates???) addrs.dedup(); Ok(addrs) }