socket通用地址类的设计(未完待续)

大纲:

一、常见socket地址结构体集合

二、设计考虑

三、最终的结构总结

四、参考文档列表

 

一、地址集合

1.sockaddr通用地址,Linux网络编程的地址结构体一种,其定义如下:

struct sockaddr{  
	unsignedshort sa_family; /* address family */
	char sa_data[14]; /* up to 14 bytes of direct address */   
}; 


     说明:sa_family:是地址家族,也称作,协议族,一般都是“AF_xxx”的形式。通常大多用的是都是AF_INET。   

     sa_data:是14字节协议地址

存在问题:如果是IPv6,则sa_data显然是不够的。

2.IPv4地址

//path:/usr/include/netinet/in.h
typedef uint32_t in_addr_t;
struct in_addr{
    in_addr_t s_addr;
};
struct sockaddr_in {
     short int sin_family; // Address family
     unsigned short int sin_port; // Port number
     struct in_addr sin_addr; // Internet address
     unsigned char sin_zero[8]; // Same size as struct sockaddr
};

 说明:可以把IPv4理解为sockaddr更详细的使用时,可以把sockaddr_in强制转换为sockaddr。

3.IPv6地址

struct in6_addr{
	u_int8_t s6_addr[16]; /* IPv6 address */
}
struct sockaddr_in6 {
          u_char           sin6_len;      /* length of this structure */
          u_char           sin6_family;   /* AF_INET6                 */
          u_int16m_t       sin6_port;     /* Transport layer port #   */
          u_int32m_t       sin6_flowinfo; /* IPv6 flow information    */
          struct in6_addr  sin6_addr;     /* IPv6 address             */
};

4.通用地址存储器

//path: /usr/include/linux/socket.h
#define sockaddr_storage __kernel_sockaddr_storage
#define _K_SS_MAXSIZE   128     /* Implementation specific max size */

struct __kernel_sockaddr_storage {
        unsigned short  ss_family;              /* address family */
        /* Following field(s) are implementation specific */
        char            __data[_K_SS_MAXSIZE - sizeof(unsigned short)];
                                /* space to achieve desired size, */
                                /* _SS_MAXSIZE value minus size of ss_family */
} __attribute__ ((aligned(_K_SS_ALIGNSIZE)));   /* force desired alignment */


总结     

1> 通用部分为协议族和地址

2>

参考:

[1] http://uw714doc.sco.com/en/SDK_netapi/sockC.TheIPv6sockaddrstructure.html

 

 


 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值