in src/client/dns.rs [30:49]
fn resolve(&self, name: Name) -> Resolving {
Box::pin(async move {
// use `JoinSet` to propagate cancelation
let mut tasks = JoinSet::new();
tasks.spawn_blocking(move || {
let it = (name.as_str(), 0).to_socket_addrs()?;
let mut addrs = it.collect::<Vec<_>>();
addrs.shuffle(&mut rand::rng());
Ok(Box::new(addrs.into_iter()) as Addrs)
});
tasks
.join_next()
.await
.expect("spawned on task")
.map_err(|err| Box::new(err) as DynErr)?
})
}