【问题标题】:How does ZeroMQ manage socket in zmq::proxy and zmq::poll?ZeroMQ 如何管理 zmq::proxy 和 zmq::poll 中的套接字?
【发布时间】:2015-09-05 21:40:14
【问题描述】:

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

实际上ZeroMQ希望用户发送一个结构转换为void* (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 为什么要这么做?

【问题讨论】:

  • 请发布骨架代码以了解您的尝试
  • CKmum 我添加了代码以使我的问题更清楚:)

标签: c++ zeromq


【解决方案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);

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2018-01-15
    • 2015-08-26
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多