【加入组播】 组播地址? 224.0.0.0~239.255.255.255 所有组播地址 224.0.0.0~224.0.0.255 有特殊用途的组播地址(不能被路由) 224.0.0.1 同一网段所有主机 224.0.0.2 同一网段所有组播路由器 224.0.1.0~238.255.255.255 公网组播地址 239.0.0.0~239.255.255.255 私网组播
IGMP 为ip层协议,IGMPv2最常用,报文有查询(Query)、报告(Report)、离开(Leave)几种操作。
setsockopt(iSock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &stIpReq, sizeof(stIpReq)); ?系统底层会立即发送一条IGMP Report,并支持Query的应答。根据网上资料,正常情况下也应支持周期性的IGMP Report 对称的,IP_DROP_MEMBERSHIP;系统底层会立即发送一条IGMP Leave 主要问题在于其中stIpReq.imr_interface.s_addr 赋值为INADDR_ANY能实现将所有网卡加入组播吗?不能! (1)当INADDR_ANY作为绑定调用中的地址给出时,会使套接字在给定端口上侦听任何网络接口。 以这种方式调用bind之后,你会在netstat命令的输出中看到这样的条目: udp 0 ? 0 ? 0.0.0.0:46162 ? 0.0.0.0:* 这是一个UDP套接字,它与端口46162绑定到INADDR_ANY。 (2)当在设置IP_ADD_MEMBERSHIP选项时用作接口地址时,INADDR_ANY指示OS将选择接口以加入给定的多播组,即“默认”网络接口。 这并不意味着它将在所有接口上加入该组。为此,您需要遍历所有网络接口并在每个接口上设置IP_ADD_MEMBERSHIP选项。
|