Когда я запускаю следующий код, я получаю сообщение об ошибке при первом вызове zmq_poll
(т. Е. Он возвращает -1
). zmq_errno()
возвращает 128
, а звонок zmr_strerror(128)
возвращает "Unknown error"
. Я использую ZMQ с C++ некоторое время без проблем, но я не могу позвонить в zmq_poll
, чтобы работать, как бы он ни был простым.Опрос ZMQ не работает
Вызов zmq::version
показывает, что я использую ZMQ версию 2.1.10.
У кого-нибудь есть идеи, почему zmq_poll
не работает?
#include <zmq/zmq.hpp>
int main(int argc, char* argv[])
{
zmq::context_t context(1);
zmq::socket_t repA(context, ZMQ_REP);
zmq::socket_t repB(context, ZMQ_REP);
repA.bind("tcp://127.0.0.1:5555");
repB.bind("tcp://127.0.0.1:5556");
zmq::pollitem_t items[] =
{
{ &repA, 0, ZMQ_POLLIN, 0 },
{ &repB, 0, ZMQ_POLLIN, 0 }
};
while (true)
{
int rc = zmq_poll(items, 2, 1000);
if (rc < 0)
{
int code = zmq_errno(); //code = 128
auto message = zmq_strerror(code); //message = "Unknown error"
}
}
}
Какая ценность errno? _Upon fail, zmq_poll() возвращает -1 и устанавливает errno в одно из значений, указанных ниже ._ http://api.zeromq.org/2-1:zmq-poll – flup
@flup Теперь я вижу, что 'zmq_poll' doesn 't напрямую возвращает номер ошибки (он просто сигнализирует с помощью '-1') и что вы должны называть' zmq_errno() ', чтобы фактически получить номер реальной ошибки. Сделав это, я получу номер ошибки '128'. (Обновленный вопрос) –
_ Чтобы получить сокет ØMQ для использования в структуре zmq_pollitem_t, вы должны указать экземпляр класса socket_t (void *) _. Поэтому я подозреваю, что вы должны использовать 'repA' вместо отправки своего адреса. – flup