Groupsock的分析_2

本文主要分析了Groupsock的成员函数,包括destRecord链表操作的removeAllDestination、removeDestination、addDestination和changeDestinationParamters,以及与组播地址相关的groupAddress、sourceFilterAddress和isSSM等函数。此外,还提到了辅助函数如write、sockNum等,以及发送和接收数据的outPut和handleRead函数。Groupsock涉及的socket操作实现在groupHelper.cpp中,对于网络编程学习者具有参考价值。
摘要由CSDN通过智能技术生成

前面说了Groupsock的基类,现在来整体的分析下Groupsock:

首先是:

      removeAllDestination

      removeDestination

      addDestination

      changeDestinationParamters

这4个成员函数,这几个函数都是跟一个 destRecord链表关联的,成员变量 fDests指向这个链表的表头。

从字面意思基本可以得到,removeAllDestination是删除所有节点,removeDestination是删除指定节点。addDestination是添加节点(如果该节点不在链表中),changeDestinationParameters是改变fDests的参数。这个链表里面存放的都是组播地址,以及组播端口。

     第二组函数是:

    groupAddress:返回fIncomingGroupEid的组播地址

    sourceFilterAddress:返回fIncomingGroupEid 的过滤源地址(ssm:源指定多播)

    isSSM: 判断fIncomingGroupEid是否为SSM,即判断souceFilterAddress是否有效。

 在构造函数里面把fIncomingGroupEid对应的节点插入到了 fDests指向的链表中了。

    几个辅助函数:

    ttl :得到fTTL的值(这个可以无视,因为我们不用关心TTL)

    multicastSendOnly:(无关紧要,用于离开多播组的,而且在程序里面通过#if 0  直接掉过来函数体)

    wasLoopedBackFromUs:判断我们接受到的消息是否是 从本机而且是同一个端口发出的,防止自循环

    write:(这个函数在前面提到过,是从OutputSocket继承来的)用于fSocketNum向指定的地址和端口发送数据。

    sockNum :(前面提到的函数)用于得到fSocketNum。

    port:(前面提到的函数)用于得到fPort

    env:(前面提到的函数)用于得到fEnv,用于错误或者信息输出

    sourcePortNum:(前面提到的函数)用于得到fSourcePort

    changePort:(前面提到的函数)用于改变fSocketNum绑定的端口

   发送和接受数据的函数:

   outPut:通过循环调用write把给定消息依次发送到fDests指向的链表的各个组播地址,并记录状态(通过statsIncoming和statsGroupIncoming)

   handleRead:通过fSocketNum读取消息,后面调用了outputToAllMembersExcept函数(这个函数没看明白,不知道干嘛用的)。

   outputToAllMembersExcept:(没看明白)

   其它函数:

   两个构造函数和一个析构函数

   members:返回fMembers,这个成员变量是DirectedNetInterfaceSet类型,这是一个容器,里面有一个hashtable结构。(这个变量在outputToAllMembersExcept函数里面用到,所以同样也没发现起什么作用。

   上面的就是对Groupsock的主要分析了,groupsock里面涉及到socket方面的函数调用都在 groupHelper.cpp里面实现了,以后再看网络编程方面的 groupHelper.cpp肯定是一个很好的资料了(今天看了他通过令TTL=0,得到自己的ip,貌似挺不错的)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值