def connect(self, address):
        """initiate a new connection to a remote socket bound to an address

        .. note:: this method will block until the connection has been made

        :param address:
            the address to which to initiate a connection, the format of which
            depends on the socket's type; for TCP sockets, this is a
            ``(host, port``) two-tuple
        """
        address = _dns_resolve(self, address)
        with self._registered('we'):
            while 1:
                err = self._sock.connect_ex(address)
                if not self._blocking or err not in _BLOCKING_OP:
                    if err not in (0, errno.EISCONN):
                        raise socket.error(err, errno.errorcode[err])
                    return
                if self._writable.wait(self.gettimeout()):
                    raise socket.timeout("timed out")
                if scheduler.state.interrupted:
                    raise IOError(errno.EINTR,
                            "interrupted system call")