IPv6 Multicasting (3) examples Receiving multicast packets struct ipv6_mreq mreq6; struct in6_addr group; struct sockaddr_storage ss; struct sockaddr *from = (struct sockaddr *)&ss; int fromlen; s = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); /* XXX use getaddrinfo instead */ /* join a multicast group */ mreq6.ipv6mr_interface = if_nametoindex(ifname); mreq6.ipv6mr_multiaddr = group; setsockopt(so, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq6, sizeof(mreq6)); /* receive a multicast pakcet */ recvfrom(recvsock, (void *)recvbuf, sizeof(recvbuf), 0, from, &fromlen); /* leave the group */ mreq6.ipv6mr_interface = if_nametoindex(ifname); mreq6.ipv6mr_multiaddr = group; setsockopt(so, IPPROTO_IPV6, IPV6_LEAVE_GROUP, &mreq6, sizeof(mreq6));