ZeroMQ如何在zmq :: proxy和zmq :: poll中管理套接字?

时间:2015-09-05 21:40:14

标签: c++ zeromq

我有一个关于ZeroMQ的问题,因为我在zmq :: proxy和zmq :: poll的ZMQ套接字上使用了指针。这样做会发生异常,错误88(非套接字上的套接字操作)。

实际上ZeroMQ希望用户发送一个无效的结构*(source of the information

我在官方文档中做了一些研究,但我没有找到ZeroMQ为什么不在套接字上使用指针。

编辑:这是我认为正确的代码

zmq::socket_t frontend_;
zmq::socket_t backend_;
zmq::proxy(&frontend_, &backend_, nullptr);

实际工作的代码就是这个:

zmq::socket_t frontend_;
zmq::socket_t backend_;
zmq::proxy((void *)frontend_, (void *)backend_, nullptr);

这对我来说很奇怪。为什么ZeroMQ会这样做?

1 个答案:

答案 0 :(得分:1)

没有什么奇怪的。

socket_t类中存在一个指针,运算符static_cast<void *>()方法返回此指针而不是使用该类的实际实例。

Can a cast operator be explicit?

这篇文章帮助我了解问题出现在official documentation test of zmq中。在c ++ 11中,不可能直接使用

zmq::proxy(frontend_, backend_, nullptr);

因为转换在zmq代码中是明确的。所以你需要像这样正确地转换套接字:

zmq::proxy(static_cast<void *>(frontend_), static_cast<void *>(backend_), nullptr);