Linux
在Linux下,套接字地址结构均以sockaddr_ 开头,并以对应协议族唯一后缀结尾
(附加:posix规范下的数据类型)
- IPv4 地址结构
struct in_addr{
in_addr_t s_addr; //32 IPv4地址
};
struct sockaddr_in{
uint8_t sin_len; // 长度字段
sa_family_t sin_family; // 网际协议
in_port_t sin_port; // 端口号
struct in_addr sin_addr; // 32 IPv4地址
char sin_zero[8]; //
};
- IPv6 地址结构
struct in6_addr{
uint8_t s6_addr[16]; // 128 IPv6地址
};
#define SIN6_LEN
struct sockaddr_in6{
uint8_t sin6_len; // 长度字段
sa_family_t sin6_family; // 网际协议
in_port_t sin6_port; // 端口号
uint32_t sin6_flowinfo; // 低序20流标 高序12保留
struct in6_addr sin6_addr;
uint32_t sin6_scope_id;
};
- 通用socket结构
struct sockaddr_storage{
uint8_t sa_len;
sa_family_t sa_family;
/
Windows
- 32位套接字结构
struct in_addr{
union{
struct{
unsigned char s_b1,s_b2,s_b3,s_b4;
}S_un_b;
struct{
unsigned short s_w1,s_w2;
}S_un_w;
unsigned long S_addr;
}S_un;
};