ZeroMQ无法在单播IPv6上运行
ZeroMQ is not working over unicast IPv6
我在使用ZeroMQ和IPv6时遇到了麻烦。当我通过 IPv4 使用连接或使用"tcp://[::1]:5558"时,它会像魅力一样连接。但是,如果我使用服务器完整 IPv6 地址(在我的本地主机或远程主机上),它会连接,但不在其他端点上获取数据。
这是我的代码示例:
客户端.cpp
#include <stdio.h>
#include <zmq.h>
int main(int argc, char** argv)
{
void* context = zmq_ctx_new();
void* socket = zmq_socket(context, ZMQ_SUB);
int ipv6 = 1;
zmq_setsockopt(socket, ZMQ_IPV6, &ipv6, 4);
zmq_connect(socket, "tcp://[fe80::52e5:49ff:fef8:dbc6]:5558");
//zmq_connect(socket, "tcp://[::1]:5558");
zmq_setsockopt(socket, ZMQ_SUBSCRIBE, "pub", 3);
zmq_msg_t message;
do {
zmq_msg_init (&message);
zmq_msg_recv (&message, socket, 0);
printf("%sn", (char*)zmq_msg_data(&message));
zmq_msg_close(&message);
} while (zmq_msg_more(&message));
}
还有服务器.cpp
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <zmq.h>
int main(int argc, char**argv)
{
void* context = zmq_ctx_new();
void* publisher = zmq_socket(context, ZMQ_PUB);
int ipv6 = 1;
zmq_setsockopt(publisher, ZMQ_IPV6, &ipv6, sizeof(int));
zmq_bind(publisher, "tcp://*:5558");
char buffer[4] = "pub";
unsigned tries = 0;
while(tries < 10) {
zmq_send(publisher, &buffer, strlen(buffer), 0);
tries++;
sleep(1);
}
return 0;
}
我正在使用 ZeroMQ 4.0.0 RC,但它也发生在 3.2 上。我在 linux(松弛软件)上并从源代码安装它。我还使用 jeroMQ 使用 java 服务器进行了测试,问题是一样的。我使用 REQ-REP 连接进行了另一个测试,问题是一样的。
提前感谢任何帮助。
fe80*
地址是本地链接,则必须指定本地主机链接名称:例如 fe80...:1%eth1
fe80::/10 — 链路本地前缀中的地址仅有效且 在单个链接上是唯一的。在此前缀中,只有一个子网是 分配(54 个零位),产生有效格式 fe80::/64。 通常选择最不重要的 64 位作为接口 以修改后的 EUI-64 格式构造的硬件地址。本地链接 每个启用 IPv6 的接口都需要地址 — 换句话说, 应用程序可能依赖于链路本地地址的存在,甚至 当没有 IPv6 路由时。这些地址与 自动配置地址 IPv4 的 169.254.0.0/16。
http://en.wikipedia.org/wiki/IPv6_address#Local_addresses
相关文章:
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何在运行中期切换GTK CSS style_context
- 如何在MS Visual Studio 2019中运行QT UI
- 如何通过cpp程序运行shell脚本
- IPC使用多个管道和分支进程来运行Python程序
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 在C应用程序中运行C++(带有STL)函数
- 运行程序时出现问题
- 控制允许动态运行c++的并发操作数
- ZeroMQ无法在单播IPv6上运行