def accept(self):
        """accept a connection on the host/port to which the socket is bound

        .. note::

            if there is no connection attempt already queued, this method will
            block until a connection is made

        :returns:
            a two-tuple of ``(socket, address)`` where the socket is connected,
            and the address is the ``(ip_address, port)`` of the remote end
        """
        with self._registered('re'):
            while 1:
                try:
                    client, addr = self._sock.accept()
                except socket.error, exc:
                    if not self._blocking or exc[0] not in _BLOCKING_OP:
                        raise
                    sys.exc_clear()
                    if self._readable.wait(self.gettimeout()):
                        raise socket.timeout("timed out")
                    if scheduler.state.interrupted:
                        raise IOError(errno.EINTR,
                                "interrupted system call")
                    continue
                return type(self)(fromsock=client), addr