Я работаю над реализацией опроса zmq :: poll, который требует очень обобщенного, модульного и гибкого способа проверки нескольких сокетов. Я пытаюсь получить экземпляр сокета из zmq :: pollitem_t.
zmq::socket_t zsocX(context, ZMQ_PAIR);
zsocX.bind(addr);
zmq::pollitem_t item = {zsocX, 0, ZMQ_POLLIN, 0};
((zmq::socket_t *)(item.socket))->send(msg);
Я получаю ошибку:
terminate called after throwing an instance of 'zmq::error_t'
what(): Socket operation on non-socket
Есть идеи, в чем проблема? Насколько я понимаю, zmq::pollitem_t::socket
это void *
, который указывает на сокет.
Редактировать: адрес памяти изменяется. Предположение, что, возможно, вместо этого используется тип сокета C API. Любое решение?
// the following lines print different values
std::cout << "Main " << (&zsocMain) << std::endl;
std::cout << "Poll " << x.socket << std::endl;