Попытка получить экземпляр сокета из опроса zeromq - PullRequest
0 голосов
/ 11 января 2019

Я работаю над реализацией опроса 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;
...