套接字地址结构

IPv4套接字地址结构
IPv4套接字地址结构通常也称为“网际套接字地址结构”,以sockaddr_in命名,定义在<netinet/in.h>头文件中。

struct in_addr{
  in_addr_t s_addr;  //32bits IPv4 address,network byte ordered
 };
 
struct sockaddr_in{
  uint8_t   sin_len;  //length of structure
  sa_family_t  sin_family;  //AF_INET
  in_port_t     sin_port;     //16bits TCP or UDP port number network byte ordered
  struct in_addr   sun_addr;  //32bits IPv4 address network byte ordered
  char       sin_sero[8];     //unused
 };
 
通用套接字地址结构
当作为一个参数传递进任何套接字函数时,套接字需要以指针的形式,来传递一个通用的指针类型。在<sys/socket.h>头文件中定义了一个通用的套接字地址结构!
struct sockaddr{
  uint8_t    sa_len;
  sa_family_t    sa_family;    //address family: AF_XXX value
  char        sa_data[14];      //protocol-specific address
 };
 
IPv6套接字地址结构
IPv6套接字地址结构定义在<netinet/in.h>头文件。
struct in6_addr{
  uint8_t   s6_addr[16];   //128bits IPv6 address network byte ordered
 };
 
struct sockaddr_in6{
  uint8_t    sin6_len;
  sa_family_t    sin6_family;    //AF_INET6  
 in_port_t    sin6_port;    //transport layer port network byte ordered
  uint32_t   sin6_flowinfo;  //flow information, undefined
  struct in6_addr sin6_addr; //IPv6 address network byte ordered
  uint32_t   sin6_scope_id;  //set of interfaces for a scope
 };

sin6_flowinfo字段分成两个部分:低序20位是流标(flow label) 高序12位保留

新的通用套接字地址结构
sockaddr_storage可以容纳系统所支持的任何套接字地址结构,其定义在<netinet/in.h>头文件。

struct sockaddr_storage{
 uint8_t    ss_len;    //length of the struct
 sa_family_t sa_family;   //address family: AF_xxx value
};


不同套接字地质结构的比较:

套接字地址结构

注:内容整理自《UNIX网络编程卷一》

你可能感兴趣的:(c,socket,unix,NetWork)