Receives and processes an IRC protocol message.
        Optional arguments:
        * rm_colon=False - If True:
                        If the message is > 3 items long:
                            Remove the colon(if found) from the [3] item.
                        Else:
                        Remove the colon(if found) from the [2] item.
        * blocking=True - Should this call block?
        * expected_replies=None - If specified:
                     If no matching reply is found:
                        Return the default_rvalue.
                    Else:
                        Return the message.
        * default_rvalue=[''] - If no message or a matching message;
                            is found, return default_rvalue.
        * ignore_unexpected_replies=True - If an,
                                    unexpected reply is encountered,
                                    should we keep going,
                                    until we get a valid reply?
                                    If False, it will just return
                        default_rvalue(If a valid reply isn't found).
        * rm_first=True - If True,
        remove [0] from the message before returning it.

def _recv(self, rm_colon=False, blocking=True,
              expected_replies=None, default_rvalue=[''],
              ignore_unexpected_replies=True, rm_first=True, recur_limit=10):
        """
        Receives and processes an IRC protocol message.
        Optional arguments:
        * rm_colon=False - If True:
                        If the message is > 3 items long:
                            Remove the colon(if found) from the [3] item.
                        Else:
                        Remove the colon(if found) from the [2] item.
        * blocking=True - Should this call block?
        * expected_replies=None - If specified:
                     If no matching reply is found:
                        Return the default_rvalue.
                    Else:
                        Return the message.
        * default_rvalue=[''] - If no message or a matching message;
                            is found, return default_rvalue.
        * ignore_unexpected_replies=True - If an,
                                    unexpected reply is encountered,
                                    should we keep going,
                                    until we get a valid reply?
                                    If False, it will just return
                        default_rvalue(If a valid reply isn't found).
        * rm_first=True - If True,
        remove [0] from the message before returning it.
        """
        append = False
        if expected_replies:
            if len(expected_replies) > 1:
                append = True

        if self.readable():
            msg = self._raw_recv()
        else:
            if not blocking:
                return default_rvalue
            else:
                msg = self._raw_recv()

        msg = msg.split(None, 3)

        if msg[1] in self.error_dictionary:
            self.exception(msg[1])
        if rm_colon:
            if len(msg) > 3:
                if msg[3][0] == ':':
                    msg[3] = msg[3][1:]
            elif len(msg) > 2:
                if msg[2][0] == ':':
                    msg[2] = msg[2][1:]
        if expected_replies:
            if msg[1] not in expected_replies:
                self.stepback(append)
                if ignore_unexpected_replies and recur_limit > 0:
                    recur_limit -= 1
                    return self._recv(rm_colon=rm_colon, blocking=blocking, \
                               expected_replies=expected_replies, \
                               default_rvalue=default_rvalue, \
            ignore_unexpected_replies=ignore_unexpected_replies,
            rm_first=rm_first, recur_limit=recur_limit)

                return default_rvalue
        if rm_first:
            return msg[1:]
        return msg