简体   繁体   English

ipv6组播接收

[英]ipv6 multicast reception

I'm unable to receive the multicast packets sent by the server. 我无法接收服务器发送的多播数据包。 I could see the packets being received via tcpdump. 我可以看到通过tcpdump接收到的数据包。 Can anyone please let me know what am I doing wrong here.Thanks. 任何人都可以让我知道我在这里做错了吗,谢谢。

struct ipv6_mreq mreq;
struct sockaddr_in6 servaddr;

sock = socket(AF_INET6,SOCK_DGRAM,0);

servaddr.sin6_family = AF_INET6;
servaddr.sin6_port = htons(61624);
servaddr.sin6_addr = in6addr_any;

inet_pton(AF_INET6,"ff38:40:2001::1",&mreq.ipv6mr_multiaddr);

mreq.ipv6mr_interface = 0;
setsockopt(sock,IPPROTO_IPV6,IPV6_JOIN_GROUP, &mreq,sizeof(mreq));
bind(sock,(struct sockaddr *)&servaddr,sizeof(servaddr));
/* using poll to receive data */

Zero is 零是 invalid 无效 supposed to be "hey kernel, select one for me" interface index. 应该是“嘿内核,为我选择一个”接口索引。 This does not work for you, most probably because your routing table does not have explicit entries that match given multicast group, and default route goes over different interface. 这对您不起作用,很可能是因为您的路由表没有与给定多播组匹配的显式条目,并且默认路由通过了不同的接口。

Use if_nametoindex(3) to resolve interface name and store it into ipv6mr_interface member of struct ipv6_mreq . 使用if_nametoindex(3)解析接口名称并将其存储到struct ipv6_mreq ipv6mr_interface成员中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM