当前位置: 技术问答>linux和unix
sockaddr_in到底是怎么定义的 ?
来源: 互联网 发布时间:2015-05-11
本文导语: 有很多书上(包括Stevens的《Unix网络编程》)说是: struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; }; 但我觉得不正确! :) 我...
有很多书上(包括Stevens的《Unix网络编程》)说是:
struct sockaddr_in {
uint8_t sin_len;
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
但我觉得不正确! :)
我去看了netinet/in.h等几个文件,根本没有sin_len字段!
我写了个小程序,得知socket_in是16个字节,而除了sin_len外的4个字段加起来刚好是
16个字节(2+2+4+8=16)。
我觉得这种才是对的:
struct sockaddr_in {
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口号 */
struct in_addr sin_addr; /* IP地址 */
unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */
};
但是为什么连stevens的书中也是错的呢?? 请高手解释一下,谢谢了!
|
这是为了和某些老协议实现的兼容性问题!
现在大部分地方已经不用了,
stevens 是针对整个unix讲的,没有针对某一个平台!
现在大部分地方已经不用了,
stevens 是针对整个unix讲的,没有针对某一个平台!