一、IP_ADD_MEMBERSHIP、IPV6_JOIN_GROUP和MCAST_JOIN_GROUP
在一个指定的本地接口上面添加一个不限源的多播组。我们将会有以下三个结构来表示添加和离开多播组
struct ip_mreq{
struct in_addr imr_multiaddr; /*ipv4 class D multicast addr*/
struct in_addr imr_interface; /* ipv4 addr of local interface*/
};
struct ip_mreq{
struct in6_addr ipv6imr_multiaddr; /*ipv6 multicast addr*/
unsigned int ipv6mr_interface /*interface index, or 0*/
};
struct group_req{
unsigned int gr_interface; /*interface index, or 0*/
struct sockaddr_storage gr_group; /*ipv6 or ipv4 multicast addr*/
};
分析如下:
1)、一个套接字可以多次加入多个多播组, 但是多播组的地址必须不同,又或者是在不同接口上的同一个多播地址。2)、在MCAST_JOIN_GROUP中, 我们支持IPv4和IPv6, 其中sockaddr_storage支持存放在系统当中的任何类型的地址。
3)、如果指定的IPv4中的地址是INADDR_ANY或者IPv6值为0的索引,那么内核将会自动选择一个本地的接口。
4)、大多数的实现实现允许套接字上