我无法让zmq服务器和客户端与IPv6通信,而它很容易与IPv4和C ++一起使用。
这是我的ip a显示的:
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 1c:1b:0d:0c:d7:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.35.208/24 brd 192.168.35.255 scope global dynamic enp0s31f6
valid_lft 7193sec preferred_lft 7193sec
inet6 fe80::fb7:c6df:9d3a:3d7b/64 scope link
valid_lft forever preferred_lft forever
服务器:
zmq::context_t context(1);
zmq::socket_t server (context, ZMQ_REP);
server.setsockopt( ZMQ_IPV6, 1);
server.bind("tcp://*:5555%enp0s31f6");
客户:
zmq::context_t context(1);
zmq::socket_t client (context, ZMQ_REQ);
client.setsockopt( ZMQ_IPV6, 1);
client.connect("tcp://[fe80::fb7:c6df:9d3a:3d7b]:5555%enp0s31f6");
服务器等待监听,客户端发送消息,服务器永远不会得到它。 IPv4工作得很好。
怎么了?
可以通过以下任一方式指定接口:
- 通配符
*
,意思是所有可用的接口。- 分配给接口的主IPv4或IPv6地址,以其数字表示形式。
- 由操作系统定义的非可移植接口名称。
如果IPv6启用,第二个选项应该有效:
client.setsockopt( ZMQ_IPV6, True ); // ENABLE
client.connect( "tcp://[fe80::fb7:c6df:9d3a:3d7b]:5555" ); // SET