当前位置: 技术问答>linux和unix
socket编程--htons
来源: 互联网 发布时间:2016-04-09
本文导语: socket编程--htons: 请看下面两行关于创建socket的语句,这两句都是从正确的程序上取下来的,因此应该没有错。 这是man里边关于socket的语法:int socket(int domain, int type, int protocol); 问题是:为什么下面的第一个要用htons,而第...
socket编程--htons:
请看下面两行关于创建socket的语句,这两句都是从正确的程序上取下来的,因此应该没有错。
这是man里边关于socket的语法:int socket(int domain, int type, int protocol);
问题是:为什么下面的第一个要用htons,而第二个不用?
sockfd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_ALL));
sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
请看下面两行关于创建socket的语句,这两句都是从正确的程序上取下来的,因此应该没有错。
这是man里边关于socket的语法:int socket(int domain, int type, int protocol);
问题是:为什么下面的第一个要用htons,而第二个不用?
sockfd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_ALL));
sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
|
看了一下,是需要增加htons,原因是ETH_P_ALL等宏定义的值被直接用来匹配以太网帧里的类型字段,所以要转换为网络序。而IPPROTO_ICMP是一个协议栈内部使用的值,不作为判断IP报文是否是ICMP报文的依据,所以不需要转换。