2013-05-07 11 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が失敗すると、zmq_poll()は-1を返し、errnoを以下に定義されている値の1つに設定します._ http://api.zeromq.org/2-1:zmq-poll – flup

+0

@flupこれで 'zmq_poll' doesnエラー番号( '-1'で伝えます)と' zmq_errno() 'を実際に呼び出して実際のエラー番号を返さなければなりません。これをして、私はエラー番号 '128'を取得します。 (更新された質問) –

+1

_zmq_pollitem_t構造体で使用するØMQソケットを取得するには、socket_tクラスのインスタンスを(void *)_にキャストする必要があります。だから私はあなたのアドレスを送信する代わりに 'repA'をキャストすべきだと思う。 – flup

答えて

4

zmq_pollitem_t構造で使用するためØMQソケットを取得するには、(void *型)にsocket_tクラスのインスタンスをキャストする必要があります。

だから、&なし

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

でなければなりません。

関連する問題