1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
use std::io; use std::net::IpAddr; use crate::util::other; use c_ares_resolver::FutureResolver; use once_cell::sync::Lazy; static GLOBAL_RESOLVER: Lazy<FutureResolver> = Lazy::new(|| FutureResolver::new().expect("new FutureResolver error")); pub async fn resolve(host: &str) -> io::Result<IpAddr> { let results = GLOBAL_RESOLVER .query_a(host) .await .map_err(|e| other(&e.to_string()))?; if let Some(result) = results.iter().next() { return Ok(IpAddr::V4(result.ipv4())); } Err(other("resolve fail")) }