class Redis::Connection::TCPSocket

def self.connect_addrinfo(addrinfo, port, timeout)

def self.connect_addrinfo(addrinfo, port, timeout)
  sock = new(::Socket.const_get(addrinfo[0]), Socket::SOCK_STREAM, 0)
  sockaddr = ::Socket.pack_sockaddr_in(port, addrinfo[3])
  begin
    sock.connect_nonblock(sockaddr)
  rescue Errno::EINPROGRESS
    raise TimeoutError unless sock.wait_writable(timeout)
    begin
      sock.connect_nonblock(sockaddr)
    rescue Errno::EISCONN
    end
  end
  sock
end