Ejemplo n.º 1
0
ssize_t TcpTransport::Write(const void* data, size_t length) {
    if (socket_ == nullptr) {
        return -1;
    }

    // Use multi-buffer writes for better performance.
    char header[8];
    EncodeMessageLength(length, header);
    if (!socket_->Send(std::vector<cutils_socket_buffer_t>{{header, 8}, {data, length}})) {
        Close();
        return -1;
    }

    return length;
}
Ejemplo n.º 2
0
static bool send_reply(Socket *client, const char *id, const char *fmt, ...) {
    va_list ap;
    char buffer[60];
    size_t length = 0;

    if (strlen(fmt) != 0) {
        va_start(ap, fmt);
        length = vsnprintf(buffer, sizeof(buffer), fmt, ap);
        va_end(ap);
    }

    char header[8];
    EncodeMessageLength(length + 4, header);

    if (strlen(fmt) != 0) {
        return client->Send(std::vector<cutils_socket_buffer_t>{{header, 8},
                {id, 4}, {buffer, length}});
    }

    return client->Send(std::vector<cutils_socket_buffer_t>{{header, 8}, {id, 4}});
}