IPv4 套接字地址结构
IPv4套接字地址结构也称为网络套接字地址结构,以sockaddr_in 命名,定义在<netinet/in.h>头文件中
struct in_addr
{
in_addr_t s_addr; /*32位IPv4 地址*/
};
struct sockaddr_in
{
uint8_t sin_len; /*地址结构的长度*/
sa_family_t sin_family; /*AF_INET*/
in_port_t sin_port; /*16 位TCP 或UDP 端口号*/
struct in_addr sin_addr; /*32位IPv4 地址,网络字节序*/
char sin_zero[8]; /*未使用*/
};
通用套接字地址结构
定义在<sys/socket.h>头文件中
struct sockaddr
{
uint8_t sa_len;
sa_family_t sa_family; /*地址族:AF_XXX */
char sa_data[14]; /*特定协议地址*/
};
套接字函数定义为以指向某个通用套接字地址结构的一个指针作为其参数之一,比如:
struct sockaddr serv;
bind(sockfd, (struct sockaddr *)&serv,sizeof(serv));
IPv6套接字地址结构
IPv6套接字地址结构定义在<netinet/in.h>中,
struct in6_addr
{
uint8_t s6_addr[16]; /*128位IPv6地址结构,网络字节序*/
};
struct sockaddr_in6
{
uint8_t sin6_len; /*地址结构的长度*/
sa_family_t sin6_family; /*AP_INET6*/
in_port_t sin6_port; /*传输层端口*/
uintt sin6_flowinfo; /*流标信息*/
struct in6_addr sin6_addr; /*IPv6 地址*/
uint32_t sin6_scope_id; /*标识具备范围的地址*/
};
新的通用套接字地址结构
定义在<netinet/in.h>头文件中
struct sockaddr_storage
{
uint8_t sa_len;
sa_family_t ss_family;
};