'A special writer used during connection establishment
only'

def _invoke(self, timeout, request, xid=None):

    self._submit(request, timeout, xid)
    zxid = None
    if xid:
        (header, buffer, offset) = self._read_header(timeout)
        if (header.xid != xid):
            raise RuntimeError('xids    do    not    match,    expected    %r    received    %r', xid, header.xid)
        if (header.zxid > 0):
            zxid = header.zxid
        if header.err:
            callback_exception = EXCEPTIONS[header.err]()
            self.logger.debug('Received    error(xid=%s)    %r', xid, callback_exception)
            raise callback_exception
        return zxid
    msg = self._read(4, timeout)
    length = int_struct.unpack(msg)[0]
    msg = self._read(length, timeout)
    if hasattr(request, 'deserialize'):
        try:
            (obj, _) = request.deserialize(msg, 0)
        except Exception:
            self.logger.exception('Exception    raised    during    deserialization    of    request:    %s', request)
            raise ConnectionDropped('invalid    server    response')
        self.logger.log(BLATHER, 'Read    response    %s', obj)
        return (obj, zxid)
    return zxid
