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<_>>();