struct sockaddr和struct sockaddr_in

来源:互联网 发布:淘宝十年产品事扫描 编辑:程序博客网 时间:2024/05/23 15:50

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保持一样大小。

阅读全文
0 0
原创粉丝点击