Я использую ZeroMQ для реализации игрушечного протокола связи; и я впервые использую этот фреймворк / библиотеку.
Теперь в моем протоколе несколько последовательных сообщений отправляются определенной стороной, и все они имеют одинаковый размер. Итак, я подумал, что не буду перераспределять их, а просто попытался повторно заполнить буфер данных сообщения другим контентом, например ::1003
zmq::message_t msg { fixed_common_size };
while (some_condition()) {
my_filling_routine(msg.data(), fixed_common_size);
the_socket.send(msg);
}
но на второй итерации этого цикла я получаю ошибку сегментации; msg.data()
- это не nullptr
. Мне пришло в голову, что, возможно, ZeroMQ каким-то образом каннибализирует память, и поэтому мне нужно написать что-то вроде:
zmq::message_t msg { fixed_common_size };
char buffer[fixed_common_size];
while (some_condition()) {
my_filling_routine(buffer, fixed_common_size);
msg.rebuild(buffer, fixed_common_size);
the_socket.send(msg);
}
Но я уверен, что это вызывает перераспределение и перераспределение.
Итак, действительно ли это так, что rebuild()
необходим, или это просто ошибка в моем коде?
Примечание: я использую сокеты Unix, на случай, если ответ каким-то образом зависит от этого.