Я тестирую код, использующий zmq в качестве сокета и сетевого инструмента, и protobuf для сериализации.
Код получает zmq_message и анализирует его в классе protobuf, взамен я изменяю значение одного из членов класса и отправляю тот же класс обратно запрашивающей стороне.
Каким-то образом во время этого процесса утверждение zmq check()
не выполняется. Я действительно не знаю, почему это происходит, поскольку все выглядит хорошо для меня.
Код выглядит в основном файле следующим образом:
zmq::socket_t external(context, ZMQ_REP);
external.bind("tcp://*:29067");
zmq::message_t request;
external.recv(&request);
msg.deserialize(request);
msg.set_probed_value(12.0);
zmq::message_t response = msg.serialize();
external.send(response);
метод десериализации выглядит следующим образом.
_msg.ParseFromString(reinterpret_cast<const char*>(msg.data()));
и метод сериализации, как показано ниже:
zmq::message_t request(_msg.ByteSize());
std::string value = _msg.SerializeAsString();
memcpy(request.data(), reinterpret_cast<const void*>(value.c_str()), value.size());
return request;
и set_probed_value()
выглядит так:
void set_probed_value(const double& val)
{
_msg.clear_probed();
_msg.set_probed(val);
}
Я точно знаю, что проблема возникает, когда я устанавливаю значение зонда на другое значение, отличное от того, которое было установлено во время разбора. Если я уберу эту строку msg.set_probed_value(12.0)
, исключений не будет, и все в порядке.
Утверждение не удалось: check () (/apps/zmq/libzmq/src/msg.cpp:347)