@checkIfClosed
    def eval(self, aString, atomicArray=None, void=False):
        if not type(aString in rtypes.STRING_TYPES):
            raise TypeError('Only string evaluation is allowed')
        self._reval(aString, void)
        if DEBUG:
            # Read entire data into memory en bloque, it's easier to debug
            src = self._receive()
            print('Raw response: %s' % hexString(src))
        else:
            src = self.sock

        if atomicArray is None:
            # if not specified, use the global default:
            atomicArray = self.atomicArray

        try:
            message = rparse(src, atomicArray=atomicArray)
            # Before the result is returned, 0-∞ OOB messages may be sent
            while isinstance(message, OOBMessage):
                if DEBUG:
                    print('OOB Message received:', message)
                ret = self.oobCallback(message.data, message.userCode)
                if message.type == rtypes.OOB_MSG:
                    self._rrespond(ret)

                if isinstance(src, (str, bytes)):
                    # This is no stream, so we have to cut off data
                    src = src[len(message):]

                message = rparse(src, atomicArray=atomicArray)
            return message
        except REvalError:
            # R has reported an evaluation error, so let's obtain a descriptive
            # explanation about why the error has occurred. R allows to
            # retrieve the error message of the last exception via a built-in
            # function called 'geterrmessage()'.
            errorMsg = self.eval('geterrmessage()').strip()
            raise REvalError(errorMsg)
Return the configured service flags.
dataset/ETHPy150Open ralhei/pyRserve/pyRserve/rconn.py/RConnector.eval--crossover with--dataset/ETHPy150Open saltstack/salt/salt/modules/openbsdrcctl.py/_get_flags