组播编程--setsockopt()选项参数小结

 

组播编程--setsockopt()选项参数作用小结

SO_RCVTIMEO SO_SNDTIMEO 设置网络发送、接收延时。在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限; 疑问:如果超时了,不能收到或不能发送到,会是什么情况呢?

SO_RCVBUF SO_SNDBUF 系统默认的状态发送和接收一次为8688字节(约为8.5K);在实际的过程中发送数据和接收数据量比较大,可以设置socket缓冲区。

SO_BROADCAST 设置广播。

SO_LINGER 当还有数据末发送完时,不立刻关闭套接字,可设置一个延时。

 

组播编程一个重要的结构体:

struct ip_mreq

{

    struct in_addr imr_multiaddr; // 组播组的IP地址。

    struct in_addr imr_interface; // 本地某一网络设备接口的IP地址。当一台主机有两个网卡时,此参数确定是哪一个IP。

};

IP_ADD_MEMBERSHIP 加入组播组。

setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));

IP_MULTICAST_IF 作用似乎跟bind()有些重复。对于单播的时候,有inet_sock的成员rcv_saddr==saddr(本地发送数据用到的地址=本地接收数据 的地址),当用于组播时,saddr等于0(即本地发送数据地址为0),此时不知道用哪个地址发送数据,这个任务就留给了IP_MULTICAST_IF 选项。 要有接收组播数据工能时,bind()不是邦写本地主机的IP,而是邦定组播组的IP。也就是说要接收到组播组发送的数据,还得把本地的IP信息提供上去,此时就用到IP_MULTICAST_IF。

IP_MULTICAST_LOOP 向loopback接口发送一个组播数据报,确保本机需要接收该组中的数据的进程能收到数据。

IP_MULTICAST_TTL TTL原本用来控制数据包在网络中的存活时间,防止由于路由器配置错误导致出现数据包传播的死循环;TTL为 1 224.0.0.0-224.0.0.255 只能在发送主机所在的一个子网内的传送,不会通过路由器转发。

更详细

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值