2013-05-07 2 views
5

Когда я запускаю следующий код, я получаю сообщение об ошибке при первом вызове 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" 
     } 
    } 
} 
+1

Какая ценность errno? _Upon fail, zmq_poll() возвращает -1 и устанавливает errno в одно из значений, указанных ниже ._ http://api.zeromq.org/2-1:zmq-poll – flup

+0

@flup Теперь я вижу, что 'zmq_poll' doesn 't напрямую возвращает номер ошибки (он просто сигнализирует с помощью '-1') и что вы должны называть' zmq_errno() ', чтобы фактически получить номер реальной ошибки. Сделав это, я получу номер ошибки '128'. (Обновленный вопрос) –

+1

_ Чтобы получить сокет ØMQ для использования в структуре zmq_pollitem_t, вы должны указать экземпляр класса socket_t (void *) _. Поэтому я подозреваю, что вы должны использовать 'repA' вместо отправки своего адреса. – flup

ответ

4

Чтобы получить ØMQ гнездо для использования в конструкции zmq_pollitem_t, вы должны привести экземпляр класса socket_t к (пустоте *).

Так оно и должно быть

zmq::pollitem_t items[] = 
{ 
    { repA, 0, ZMQ_POLLIN, 0 }, 
    { repB, 0, ZMQ_POLLIN, 0 } 
}; 

Без &.

Смежные вопросы