Я реализую формат проводки ZeroMQ по именованным каналам Win32. Формат требует добавления сообщения с указанием его размера. Мой интерфейс выглядит как send(std::vector<unsigned char>)
, поэтому пользователь уже выделил буфер точного размера своих данных, и я строю заголовок размера на основе vector.size()
.
В настоящее время я отправляю заголовок размера в автономной записи в канал. Но тогда, если последующая запись фактического содержимого сообщения не удалась, поток данных остается в плохом состоянии, когда получатель ожидает больше данных, но отправитель считает, что сообщение не удалось.
Я хотел бы объединить заголовок размера и содержимое в одну запись канала, чтобы заголовок не проходил сам по себе. Но я бы не хотел копировать содержимое vector
, потому что оно может быть довольно большим. Есть ли способ объединить два буфера в один канал записи Win32?
Если нет, я всегда могу добавить что-то вроде unsigned char *getPipeBuffer(size_t size)
, которое выделяет дополнительное место для заголовка. Но было бы неплохо оставить интерфейс нетронутым.