protected function sendExecuteRequest($manager, Request $request, $cache = null)
    {
        $serialized = $this->serializeParams($request->getParams());
        $msg = new ExecuteRequest($cache, $request->getFunction(), $serialized);

        $socket = $this->getSocket($manager);
        $stream = $socket->getStream();
        $stream->send($msg);

        try {
            $response = $stream->read(new TimeoutTimer($this->delay));
        } catch (TimeoutException $ex) {
            $this->invalidateSocket($manager);

            throw $ex;
        }

        if (!$response instanceof ExecuteResponse) {
            $msg = $manager.': Invalid response '.get_class($response).'.';
            $this->getLogger()->notice($msg);
            throw new InvalidResponseException($msg);
        }

        if ('' != $response->getResult()) {
            $this->handleFetchResponse($response, $request);
        }

        return $response;
    }