# File lib/hiredis/ruby/connection.rb, line 143
        def _connect_sockaddr(af, sockaddr, timeout)
          sock = Socket.new(af, Socket::SOCK_STREAM, 0)

          begin
            sock.connect_nonblock(sockaddr)
          rescue Errno::EINPROGRESS
            if IO.select(nil, [sock], nil, timeout)
              # Writable, check for errors
              optval = sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_ERROR)
              errno = optval.unpack("i").first

              # Raise socket error if there is any
              raise self.class.errno_to_class[errno] if errno > 0
            else
              # Timeout (TODO: replace with own Timeout class)
              raise Errno::ETIMEDOUT
            end
          end

          sock
        rescue
          sock.close if sock

          # Re-raise
          raise
        end