c++ - 试图从 zeromq pollitem 获取套接字实例

标签 c++ sockets zeromq

我正在研究 zmq::poll 的实现,它需要一种非常通用、模块化和灵活的方式来检查多个套接字。我正在尝试从 zmq::pollitem_t 获取套接字实例。

zmq::socket_t zsocX(context, ZMQ_PAIR);
zsocX.bind(addr);
zmq::pollitem_t item = {zsocX, 0, ZMQ_POLLIN, 0};
((zmq::socket_t *)(item.socket))->send(msg);

我得到错误:

terminate called after throwing an instance of 'zmq::error_t'
  what(): Socket operation on non-socket

知道问题出在哪里吗?据我了解,zmq::pollitem_t::socket 是指向套接字的 void *

编辑:内存地址改变。建议改用 C API 套接字类型。有什么解决办法吗?

// the following lines print different values
std::cout << "Main " << (&zsocMain) << std::endl;
std::cout << "Poll " << x.socket << std::endl;

最佳答案

我遇到了类似的问题。我的问题的答案可能对您有帮助:

ZeroMQ: How to cast a pollitem_t item, used in Poller, back to a ZeroMQ socket?

简而言之,您可以查看 zmq::poller_t 作为 ZMQ DRAFT API 的一部分。

关于c++ - 试图从 zeromq pollitem 获取套接字实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54139785/

相关文章:

c++ - 如何确保 initializer_list 不为零

java - Scala 套接字无法写入输出流

python - python 中的客户端服务器编程?

message-queue - ZeroMq 中发布-订阅和推拉模式的区别

c++ - 实现以恒定间隔刷新的缓冲流的标准方法?

c++ - Visual Studio 2012 中的奇怪错误

c++ - 查询 std::mutex 锁定状态

java - 创建一个简单的 LAN 信使

linux - ZeroMQ REQ-REP 不起作用

python - 在 python 中列出或命令 zeromq