c++ - 试图从 zeromq pollitem 获取套接字实例
问题描述
我正在研究 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:如何将 Poller 中使用的 pollitem_t 项转换回 ZeroMQ 套接字?
简而言之,您可以查看zmq::poller_t
作为ZMQ DRAFT API的一部分。
推荐阅读
- azure-data-factory-2 - Azure DataFactory 运行活动以响应失败的多个活动中的任何一项
- r - 使用 Pivot_Longer() 和 Pivot_Wider (Tidyverse) 转置小标题
- python - 来自随机弹出窗口的 Python Selenium Click Interception 错误
- javascript - 使用 AdonisJS 5 的文件存储 (S3)
- sicp - 是否有实现 call-with-current-continuation 的 SICP 元循环评估器
- r - 如何在 Shiny 中使用 updateSelectInput 更新复选框输入
- java - 在 Dremio 中通过 REST 调用添加数据源
- java - Spark java DataFrame Date过滤器基于max Date另一个DataFrame
- apache-kafka - Kafka 分区偏移量分布不均
- r - 在R中旋转轴文本标签