#include #include #include #include #include #include int main() { struct in6_addr sin6_addr; inet_pton(AF_INET6, "ff15::1234", &sin6_addr); struct sockaddr_in6 my_addr, from_addr; my_addr.sin6_family = AF_INET6; my_addr.sin6_port = htons(16789); my_addr.sin6_addr = sin6_addr; my_addr.sin6_flowinfo = 0; my_addr.sin6_scope_id = 0; int sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP); int yes = 1; setsockopt (sock, SOL_SOCKET, SO_BROADCAST, &yes, sizeof yes); setsockopt(sock, SOL_IPV6, IPV6_MULTICAST_HOPS, &yes, sizeof yes); setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes); bind (sock, (struct sockaddr *)&my_addr, sizeof my_addr); char buf[1024]; #if 0 struct ipv6_mreq maddr; maddr.ipv6mr_multiaddr = sin6_addr; maddr.ipv6mr_interface = 0; setsockopt (sock, SOL_IPV6, IPV6_ADD_MEMBERSHIP, &maddr, sizeof maddr); #else struct group_req gr; gr.gr_interface = 0; memcpy(&gr.gr_group, &my_addr, sizeof my_addr); setsockopt(sock, SOL_IPV6, MCAST_JOIN_GROUP, &gr, sizeof gr); #endif sendto (sock, "Hello", strlen ("Hello"), 0, (struct sockaddr *)&my_addr, sizeof my_addr); unsigned int sizeof_from_addr = sizeof from_addr; int len = recvfrom(sock, buf, sizeof buf, 0, (struct sockaddr *)&from_addr, &sizeof_from_addr); printf ("%d bytes received\n", len); return 0; }