IPv4套接口地址,定义在头文件中。
struct in_addr {
in_addr_t s_addr;
};
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];
};
说明:
.POSIX规范只需要这个结构中的3个成员:sin_family,sin_port,sin_addr。
.长度成员简化了变长套接口地址结构的处理。
.in_addr_t必须是一个至少32位的无符号整数类型,in_port_t必须是一个至少16位的无符号整数类型,而sa_family_t可以是任何无符号整数类型,一般在支持变长成员的实现中,它是一个8位的无符号整数,而在不支持长度成员的实现中,它是一个无符号的整数。
.sa_family_t与socklen_t定义在中,in_addr_t与in_port_t定义在中。
.sin_addr成员是一个结构的原因是,早期的版本中,将in_addr结构定义为不同结构的联合,以允许访问32位IPv4地址中的每个字节,或者2个16位值中的任一个。但是随着子网划分技术的来临和无类地址编排的出现,各种地址类正在消失,这就不需要联合了。
通用套接口地址结构
struct sockaddr{
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14];
};
IPv6套接口地址结构:(略)
新的通用套接口地址结构:sockaddr_storage
阅读(861) | 评论(0) | 转发(0) |