When I connect to a domain:port
async_std::net::TcpStream::connect("google.com:80");
The internal logic of async_std::net::ToSockstAddrs::to_socket_addrs
goes like this
addrs.to_socket_addrs
-> addrs.parse::<std::net::SocketAddr>
-> read_socket_addr
-> read_socket_addr_v4
-> read_socket_addr_v6
-> std::net::ToSocketAddrs::to_socket_addrs(addrs)
-> addrs.parse::<std::net::SocketAddr>
-> read_socket_addr
-> read_socket_addr_v4
-> read_socket_addr_v6
-> resolve_socket_addr(addrs.try_into::<LookupHost>())
The logic makes nonsense judgments for socket_v4
and socket_v6
for twice, so what's the purpose?
And is the following usage better?
let host = dns_lookup::lookup_host("google.com:80")?;
let target: Vec<SocketAddr> = host
.into_iter()
.map(|h| SocketAddr::new(h, 80))
.collect();
async_std::TcpStream::connect(target);