protected function send($command, array $arguments)
    {
        $event = $this->prepareEvent($command, $arguments);

        // The last arguments of call_user_func_array must not be null
        if (end($arguments) === null) {
            array_pop($arguments);
        }

        $retry = $this->maxRetry;
        while ($retry >= 0) {
            try {
                $return = call_user_func_array([$this->getSession(), $command], $arguments);

                // No exception, we can return the result
                $retry = -1;
            } catch (\Cassandra\Exception\RuntimeException $e) {
                if ($retry > 0) {
                    // Reset the current session to retry the command
                    $this->resetSession();
                    $retry--;
                } else {
                    // too many retries, rethrow the exception
                    throw $e;
                }
            }
        }

        return $this->prepareResponse($return, $event);
    }