套接字地址结构

来源:互联网 发布:100以内常用勾股数组 编辑:程序博客网 时间:2024/04/29 09:17

1.IPV4结构:

struct sockaddr_in

{

uint8_t   sin_len;  //本结构体长度

sa_family_t   sin_family;  //IPv4对应AF_INET

        in_port_t    sin_port;    //16位端口号,一般使用htons()ntohs()进行转换

       struct in_addr   sin_addr;  //32位地址,一般使用inet_ntoa()/inet_aton()进行转换

char  sin_zero[8];   //闲置

};

struct in_addr

{

in_addr_t  s_addr; //32位地址

};

2.通用套接字地址结构

struct  sockaddr

{

uint8_t   sa_len;

   sa_family_t   sa_family;

char   sa_data[14];

};

其唯一作用是进行强制类型转换(例如在bind()函数中)

3.IPv6结构

struct in6_addr

{

unit8_t  s6_addr[16];  //128位IPv6地址

};

#define SIN6_LEN   //用于编译器在编译时检测

struct sockaddr_in6

{

  uint8_t   sin6_len;   //结构体长度

sa_family_t   sin6_family;  //IPv6对应AF_INET6

in_port_t   sin6_port;  //端口号

uint32_t   sin6_flowinfo  //流信息

struct  in6_addr  sin6_addr; //IPv6地址,使用函数inet_pton()/inet_ntop()转换

uint32_t   sin6_scope_id; //范围地址标识

}

4.新的通用套接字地址结构

struct sockaddr_storage

{

uint8_t  ss_len;

sa_family_t  ss_family;

......  //其余数据对用户透明

}

此结构为了克服sockaddr结构缺点而出现,能容纳系统所支持的任何套接字地址结构


原创粉丝点击