如何在本地计算机上为ZeroMQ REQ / REP设置指定IPv6地址?

时间:2017-12-16 21:22:47

标签: zeromq ipv6

我无法让zmq服务器和客户端与IPv6通信,而它可以轻松地与IPv4一起使用C ++。

这是我的ip显示:

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工作得很好。

有什么问题?

1 个答案:

答案 0 :(得分:2)

ZeroMQ API v4.2.2规范说:

  

可以通过以下任一方式指定接口:

     
      
  • 外卡 * ,表示所有可用的界面。
  •   
  • 以数字表示形式分配给接口的主IPv4或IPv6地址。
  •   
  • 操作系统定义的非便携式接口名称。
  •   

如果启用IPv6,2 nd 选项应该有效:

client.setsockopt( ZMQ_IPV6, True );                        // ENABLE
client.connect( "tcp://[fe80::fb7:c6df:9d3a:3d7b]:5555" );  // SET