关于socket的几个数据结构
struct sockaddr {
uint8_t sa_len; /**< 地址长度, 一般不用*/
sa_family_t sa_family; /* 地址族, AF_xxx*/
char sa_data[14]; /* 14字节的协议地址*/
};
上面是通用的socket地址, 具体到Internet socket, 用下面的结构, 二者可以进行类型转换
1. IPv4
struct sockaddr_in {
uint8_t sin_len; /**< 地址长度, 一般不用*/
sa_family_t sin_family; /**< 地址族*/
in_port_t sin_port; /**< 16Bit(2Byte) 端口号*/
struct in_addr sin_addr; /**< 32Bit(4Byte) Internet地址*/
char sin_zero[8]; /**< 保留, 保证与sockaddr长度相同*/
};
其中, struct in_addr 就是32Bit IP地址:
struct in_addr {
in_addr_t s_addr; /**< 32Bit IPv4地址*/
};
利用函数inet_addr()可以将点分制的IP地址 (如: 192.168.0.1) 转换为上述结构地址, 不介意用.
2. IPv6
#define SIN6_LEN
struct sockaddr_in6 {
uint8_t sin_len; /**< 地址长度, 一般不用*/
sa_family_t sin6_family; /**< 地址族*/
in_port_t sin6_port; /**< 16Bit(2Byte) 端口号*/
uin32_t sin6_flowinfo; /**< 32Bit(4Byte) 连接标记通信量*/
struct in6_addr sin6_addr; /**< 128Bit(16Byte) Internet地址*/
};
其中, struct in6_addr 就是128Bit IP地址:
struct in6_addr {
uint8_t s6_addr[16];
};
【2007-04-10】
文章评论(0条评论)
登录后参与讨论