The entry point is the HickoryToSocketAddrs
struct, which wraps the host and port and use
hickory-dns
under the hood to perform DNS resolution instead of glibc's getaddrinfo
which
can block or has a lot of other known issues.
If this is run in a tokio
context, we use it, otherwise we spawn a new tokio
runtime to
perform the query.
use hickory_to_socket_addrs::HickoryToSocketAddrs;
use std::net::ToSocketAddrs;
let socket_addrs = "www.rust-lang.org:443"
.parse::<HickoryToSocketAddrs<_>>()?
.to_socket_addrs()?
.collect::<Vec<_>>();