多播套接字选项分析
来源:互联网 发布:vb.net chart拖动放大 编辑:程序博客网 时间:2024/04/28 06:09
一、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)、大多数的实现实现允许套接字上加入多播组的次数是有限的 。 ipv4的这个限制是常值IP_MAX_MEMBERSHIPS。
二、IP_DROP_MEMBERSHIP、IPV6_LEAVE_GROUP和MCAST_LEAVE_GROUP
离开指定本地接口的一个不限源的多播组
1)、如果未指定本地接口(IPV4和INADDR_ANY或者IPV6为0的接口索引),那么将会抹除首个匹配的多播组成员关系。
2)、当相应的套接字关闭又或者是(因显示关闭《close》,又或者是进程终止), 那么多播组和套接字的成员关系将会自动抹除
3)、单个主机上多个套接字加入相同的多播组,这样, 单个套接字的抹除并影响其他成员之间的关系
三、IP_BLOCK_SOURCE和MCAST_BLOCK_SOURCE
struct ip_mreq_source{struct in_addr imr_multiaddr;// ipv4 class D multicast addr.struct in_addr imr_sourceaddr; //ipv4 source addr.struct in_addr imr_interface; // ipv4 addr of local interface.};struct group_source_req{unsigned int gsr_interface; //interface index, or 0.struct sockaddr_storage gsr_group; // ipv4 or ipv6 multicast addr.struct sockaddr_storage gsr_source; // ipv4 or ipv6 source addr.};分析:
1)、如果加入同一个多播组的所有套接字堵塞同一个源, 那么主机系统可以通知路由器无须分流。
2)、该套接字选项可用于忽略譬如说来子无赖发送进程的分组流通。
3)、源堵塞请求修改已存在的组成员关系,因此必须使用IP_ADD_MEMBERSHIP, IPV6_ADDR_MEMBERSHIP, MCAST_JOIN_GROUP在相应的接口上加入对应的多播分组。
四、IP_UNBLOCK_SOURCE和MCAST_UNBLOCK_SOURCE
开通先前被堵塞的源
1)、 如果本指定本地接口(也就是对于ipv4的INADDR_ANY, 又或者是与协议无关的api为0的索引), 那么将会开通首个匹配的被堵塞源
五、IP_ADD_SOURCE_MEMBERSHIP和MCAST_JOIN_SOURCE_GROUP
在一个指定的本地接口上加入一个特定于源的多播组。
1)、特定于源的多播组加入绝不允许使用IP_ADD_MEMBERSHIP, IPV6_ADDR_MEMBERSHIP, MCAST_JOIN_GROUP加入多播组
2)、如果指定的IPv4中的地址是INADDR_ANY或者IPv6值为0的索引,那么内核将会自动选择一个本地的接口。
六、IP_DROP_SOURCE_MEMBERSHIP和MCAST_LEAVE_SOURCE_GROUP
在指定的本地接口上离开一个特定于源的多播组
1)、如果未指定本地接口(IPV4和INADDR_ANY或者IPV6为0的接口索引),那么将会抹除首个匹配的特定于源的多播组成员关系。
2)、当相应的套接字关闭又或者是(因显示关闭《close》,又或者是进程终止), 那么特定于源的多播组和套接字的成员关系将会自动抹除
3)、单个主机上多个套接字加入相同的特定于源的多播组,这样,单个套接字的抹除并影响其他套接字的关系。
七、IP_MULTICAST_IF和IPV6_MULTICAST_IF
指定通过本套接字发的多播数据报的外出接口。
1)、ipv4版本, 有in_addr决定, 而ipv6将会由某个接口索引指定。
2)、ipv4位INADDR_ANY或者ipv6为0的接口索引, 那么先前通过本套接字指定的任何接口都将会被抹除, 系统改为每次发送套接字的外出接口。
3)、每次需要区分当进程加入多播组时的指定本地接口。
八、IP_MULTICAST_TTL和IPV6_MULTICAST_HPOS
给外出的多播数据报设置iPv4的TTL或者ipv6的跳限。
1)、如果为设定, 将或自动默认为1
- 多播套接字选项分析
- Java 多播套接字
- Java多播套接字
- 路由套接字、密钥管理套接字、广播、多播
- 使用套接字实现多播通信
- 套接字选项
- 套接字选项
- 套接字选项setsockopt()
- 通用套接字选项
- 7 套接字选项
- 套接字选项介绍
- 套接字选项
- 套接字选项
- 套接字选项
- 套接字选项
- 套接字选项
- 套接字的选项
- 套接字选项
- 新手教学-idea+maven+tomcat
- Quartz与Spring集成的2种方式
- postgresql重启、查看服务
- raw_input 与 input的区别
- 二叉搜索树转换成一个排序的双向链表和实现一个线程安全且高效单例类——题集(二十一)
- 多播套接字选项分析
- tensorflow教程学习一
- POJ3278 Catch That Cow
- POI读取xls文档的简单代码
- get和post
- 【剑指Offer】面试题35:第一个只出现一次的字符
- Altium Designer铺铜时抠铜
- sgml html xml dtd xml dom
- Linux学习小结(一)