# File lib/hiredis/ruby/connection.rb, line 74
        def _connect(host, port, timeout)
          error = nil
          sock = nil

          # Resolve address
          begin
            addrinfo = Socket.getaddrinfo(host, port, Socket::AF_UNSPEC, Socket::SOCK_STREAM)
          rescue SocketError => se
            raise se.message
          end

          addrinfo.each do |_, port, name, addr, af|
            begin
              sockaddr = Socket.pack_sockaddr_in(port, addr)
              sock = _connect_sockaddr(af, sockaddr, timeout)
            rescue => aux
              case aux
              when Errno::EAFNOSUPPORT, Errno::ECONNREFUSED
                error = aux
                next
              else
                # Re-raise
                raise
              end
            else
              # No errors, awesome!
              break
            end
          end

          unless sock
            # Re-raise last error since the last try obviously failed
            raise error if error

            # This code path should not happen: getaddrinfo should always return
            # at least one record, which should either succeed or fail and leave
            # and error to raise.
            raise
          end

          sock
        end