Я тестирую код, который использует 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);
}
Я точно знаю, что проблема возникает, когда я устанавливаю значение probed на другое число, чем то, которое было установлено во время синтаксического анализа. Если я удалю эту строку msg.set_probed_value(12.0)
, никаких исключений не произойдет, и все будет в порядке.
Ошибка утверждения: проверьте () (/apps/zmq/libzmq/src/msg.cpp:347)