现在的位置: 首页 > 综合 > 正文

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

2013年05月30日 ⁄ 综合 ⁄ 共 938字 ⁄ 字号 评论关闭

 

组播编程--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 只能在发送主机所在的一个子网内的传送,不会通过路由器转发。

更详细

抱歉!评论已关闭.