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; }
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}}); }