您的位置:首页 > 其它

struct sockaddr和struct sockaddr_in

2017-08-16 14:09 260 查看
struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址。

网络中的地址包含3个方面的属性:

1 地址类型: ipv4还是ipv6

2 ip地址

3 端口

linux/socket.h中

struct sockaddr {
sa_family_t sa_family;  /* address family, AF_xxx   */
char        sa_data[14];    /* 14 bytes of protocol address */
};


linux/in.h定义了struct sockaddr_in结构体

struct sockaddr_in {
short            sin_family;       // 2 bytes e.g. AF_INET, AF_INET6
unsigned short   sin_port;    // 2 bytes e.g. htons(3490)
struct in_addr   sin_addr;     // 4 bytes see struct in_addr, below
char             sin_zero[8];     // 8 bytes zero this if you want to
};

struct in_addr {
unsigned long s_addr;          // 4 bytes load with inet_pton()
};


这两个结构体一样大,都是16个字节,而且都有family属性,不同的是:

sockaddr用其余14个字节来表示sa_data,而sockaddr_in把14个字节拆分成sin_port, sin_addr和sin_zero

分别表示端口、ip地址。sin_zero用来填充字节使sockaddr_in和sockaddr保持一样大小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: