ZMQ民意调查不起作用
问题描述:
当我运行下面的代码时,第一次调用zmq_poll
时出现错误(即返回-1
)。 zmq_errno()
返回128
和zmr_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"
}
}
}
答
要获得在zmq_pollitem_t结构使用ØMQ插座,你应该投的socket_t类的一个实例(无效*)。
所以应该
zmq::pollitem_t items[] =
{
{ repA, 0, ZMQ_POLLIN, 0 },
{ repB, 0, ZMQ_POLLIN, 0 }
};
没有&
。
errno的价值是什么?失败时,zmq_poll()应返回-1并将errno设置为下面定义的值之一._ http://api.zeromq.org/2-1:zmq-poll – flup 2013-05-07 23:03:25
@flup我现在看到'zmq_poll' doesn直接返回错误号(它只是用'-1'发信号),并且你必须调用'zmq_errno()'来真正得到真正的错误号。完成这个后,我得到错误号码“128”。 (更新问题) – 2013-05-07 23:08:36
_To获得在zmq_pollitem_t结构使用ØMQ插座,你应该投的socket_t类的一个实例(无效*)_。所以我怀疑你应该使用'repA'而不是发送它的地址。 – flup 2013-05-07 23:17:04