2013-05-07 10 views
5

Po uruchomieniu następującego kodu otrzymuję komunikat o błędzie podczas pierwszego połączenia z numerem zmq_poll (to znaczy zwraca -1). zmq_errno() zwraca 128 izwraca "Unknown error". Używam ZMQ z C++ od jakiegoś czasu bez żadnych problemów, ale nie mogę uzyskać połączenia z zmq_poll do pracy, bez względu na to, jak proste to jest.Sonda ZMQ nie działa

Wywołanie zmq::version ujawnia, że ​​używam ZMQ w wersji 2.1.10.

Czy ktoś ma pomysł, dlaczego nie działa 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

Jaka jest wartość errno? _Upon awarii, zmq_poll() zwraca -1 i ustawia errno na jedną z wartości zdefiniowanych poniżej._ http://api.zeromq.org/2-1:zmq-poll – flup

+0

@flup Widzę teraz, że 'zmq_poll' doesn 't bezpośrednio zwraca numer błędu (po prostu wysyła sygnał z '-1') i musisz wywołać' zmq_errno() ', aby uzyskać prawdziwy numer błędu. Po wykonaniu tego otrzymuję numer błędu '128'. (Zaktualizowane pytanie) –

+1

_Aby uzyskać gniazdo ØMQ do użycia w strukturze zmq_pollitem_t, należy rzucić instancję klasy socket_t na (void *) _. Podejrzewam więc, że zamiast przesyłać adres, należy przesłać "repA". – flup

Odpowiedz

4

Aby otrzymać gniazdo ØMQ do stosowania w konstrukcji zmq_pollitem_t, oddasz instancję klasy socket_t do (void *).

Tak powinno być

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

Bez &.

Powiązane problemy