在定位产品问题的过程中,发现对数据包IPV6包长度不对,定位发现,在进行计算时先将主机序转成网络序,然后两个网络序数值相加导致数据异常。
下面以一段代码事例说明问题 :
#include <stdio.h>
#include <arpa/inet.h>
int main()
{
unsigned short i = 248, j = 40;
unsigned short test = 0, test2= 0;
test = htons(i) + htons(j);
test2 = htons(i + j);
printf("%hu, %hu\n", ntohs(test), ntohs(test2));
return 0;
}
结果很明显出问题了。
正确做法是先将所有的数值转成主机序,加减运算后再转成网络序就正常了。