2013-05-07 48 views
5

當我運行下面的代碼時,第一次調用zmq_poll時出現錯誤(即返回-1)。 zmq_errno()返回128zmr_strerror(128)呼叫返回"Unknown error"。我一直在C++中使用ZMQ一段時間,現在沒有任何問題,但我無法打電話給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的價值是什麼?失敗時,zmq_poll()應返回-1並將errno設置爲下面定義的值之一._ http://api.zeromq.org/2-1:zmq-poll – flup 2013-05-07 23:03:25

+0

@flup我現在看到'zmq_poll' doesn直接返回錯誤號(它只是用'-1'發信號),並且你必須調用'zmq_errno()'來真正得到真正的錯誤號。完成這個後,我得到錯誤號碼「128」。 (更新問題) – 2013-05-07 23:08:36

+1

_To獲得在zmq_pollitem_t結構使用ØMQ插座,你應該投的socket_t類的一個實例(無效*)_。所以我懷疑你應該使用'repA'而不是發送它的地址。 – flup 2013-05-07 23:17:04

回答

4

要獲得在zmq_pollitem_t結構使用ØMQ插座,你應該投的socket_t類的一個實例(無效*)。

所以應該

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

沒有&