tcp-connect 0.1.0

TCP connect is a replacment of the `std::net::TcpStream::connect` with DNS caching
Documentation
use std::io;
use std::net::{SocketAddr, ToSocketAddrs};

pub(crate) trait DNSResolver {
    fn lookup(&self, hostname: &str) -> Result<Vec<SocketAddr>, io::Error>;
}

pub(crate) struct ToSocketAddrDNSResolver;

impl ToSocketAddrDNSResolver {
    pub(crate) fn new() -> Self {
        ToSocketAddrDNSResolver {}
    }
}

impl DNSResolver for ToSocketAddrDNSResolver {
    fn lookup(&self, hostname: &str) -> Result<Vec<SocketAddr>, io::Error> {
        let addrs: Vec<SocketAddr> = (hostname, 0).to_socket_addrs()?.collect();
        Ok(addrs)
    }
}

unsafe impl Send for ToSocketAddrDNSResolver {}
unsafe impl Sync for ToSocketAddrDNSResolver {}