setsockopt() IP层的设置 IPPROTO_IP

网上搜索setsockopt()用法几乎都是SOL_SOCKET的设置,这里总结一下IPPROTO_IP层的设置。

可取值                         setsockopt     getsockopt
IP_MULTICAST_LOOP     支持          支持
IP_MULTICAST_TTL        支持          支持
IP_MULTICAST_IF          支持          支持
IP_ADD_MEMBERSHIP     支持          不支持
IP_DROP_MEMBERSHIP   支持          不支持

1.         IP_MULTICAST_LOOP
当接收者加入到一个多播组以后,再向这个多播组发送数据,这个字段的设置是否允许再返回到本身。

int loop=1;    //1:on  0:off
setsockopt(sock,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizeof(loop));

2.         IP_MULTICAST_TTL
默认情况下,多播报文的TTL被设置成了1,也就是说到这个报文在网络传送的时候,它只能在自己所在的网络传送,当要向外发送的时候,路由器把TTL减1以后变成了0,这个报文就已经被Discard了。例:

    char ttl;
    ttl = 2;
    setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, (char*)ttl, sizeof(ttl));

3.         IP_MULTICAST_IF
发送多播报文时用的本地接口,默认情况下被设置成了本地接口的第一个地址。
       未完

4.         IP_ADD_MEMBERSHIP
这个option和下面的option是实现多播必不可少的,它用于加入一个多播组,例:
   

struct ip_mreq ipmr;
ipmr.imr_interface.s_addr = htonl(INADDR_ANY);
ipmr.imr_multiaddr.s_addr = inet_addr("234.5.6.7");
setsockopt(s, IPPROTO_IP, IP_ADDR_MEMBERSHIP, (char*)&ipmr, sizeof(ipmr));



5.         IP_DROP_MEMBERSHIP
用于离开一个多播组,使用方法同IP_ADDR_MEMBERSHIP。

struct ip_mreq ipmr;
int   len;
setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP, (char*)&ipmr, &len);

 

你可能感兴趣的:(setsockopt() IP层的设置 IPPROTO_IP)