网络编程之原始套接口

IPV6_CHECKSUM套接口选项

对于ICMPv6原始套接口,内核总是计算并存储ICMPv6头部中的校验和。尽管ICMPv4和ICMPv6都要求发送者计算校验和,ICMPv6却在起校验和中包括一个伪头部。该伪头部中的字段之一是源IPv6地址,而应用程序通常让内核选择其值。

对于其他IPv6原始套接口(不是以IPPROTO_ICMPV6为第3个参数调用socket创建的那些原始套接口),进程可以使用一个套接口选项告知内核是否计算并存储外出分组中的校验和,且验证接收分组中的校验和。该选项缺省情况下是禁止的,不过把它的值设置为某个非负值就可以开启该选项,例如如下代码:

int offset = 2;

if(setsockopt(sockfd,IPPROTO_IPV6,IPV6_CHECKSUM,&offset,sizeof(offset)) < 0)

{

        出错处理

};

这段代码不仅开启指定套接口上的校验和,而且告知内核这个16位的校验和字段的字节偏移量:本例中为自应用数据开始处起偏移2个字节。禁止该选项要求把这个偏移量设置为-1.一旦开启,内核将为在指定套接口上发送的外出分组计算并存储校验和,并且为该套接口接收的外来分组验证校验和。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值