套接字地址结构

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网络编程卷一》

转载于:https://my.oschina.net/showcolors/blog/105062

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值