UNIX网络编程笔记——Socket Address Structure

Socket Address Structure——头文件<netinet/in.h>

IPv4 Socket Address Structure
View Code
/*  IPv4 Socket Address Structure  */
typedef  uint32_t  in_addr_t;
typedef  uint16_t  in_port_t;
typedef  unsigned short  sa_family_t;

struct  in_addr{
   in_addr_t  s_addr;    /* 32-bit IPv4 address */
                                /* network byte ordered */    
};
struct  sockaddr_in {
   uint8_t        sin_len;
   sa_family_t      sin_family;
   in_port_t      sin_port;
   struct  in_addr      sin_addr;
   char          sin_zero[8];
};
IPv6 Socket Address Structure
View Code
/*  IPv6 Socket Address Structure  */
typedef  uint16_t  in_port_t;
typedef  unsigned short  sa_family_t;

struct  in6_addr{
   uint8_t    s6_addr[16];
};
struct  sockaddr_in6{
   uint8_t        sin6_len;
   sa_family_t      sin6_family;
   in_port_t      sin6_port;
   uint32_t      sin6_flowinfo;
   struct  in6_addr sin6_addr;
};
Comparison of Socket Structure:

Generic Socket Address Structre——<sys/socket.h>
由于套接字函数需接收来自不同协议的地址结构,ANSI的办法是使用通用的指针类型,即(void *),但套接字函数先于ANSI之前定义,其方法是:在<sys/soket.h>定义一个通用的套接字地址结构。
struct  sockaddr{
   uint8_t        sa_len;
   sa_family_t      sa_family;
   char          sa_data[14];
};

对于这些函数的任何调用都必须将指向特定于协议的套接口地址结构的指针类型转换成指向通用套接口地址结构的指针,例如:

struct sockaddr_in serv;    /* IPv4 socket address structure */
/* fill in serv{} */
bind(sockfd, (struct sockaddr *)&serv, sizeof(serv));
New Generic  Address Structre——<netinet/in.h>

作为IPv6套接口API的一部分而定义,足以容纳系统所支持的任何套接口地址结构。

struct sockaddr_storage{
    uinet8_t        ss_len;       /* implementation depentdent */
    sa_family_t    ss_family;  /* address family: AR_xxx value */

};

除了 ss_family 和 ss_len 外, sockaddr_storage 结构中的字段(如果有的话)对用户是透明的。sockaddr_storage 必须类型强制转换或拷贝到适合于ss_family字段所给出地址类型的套接口地址结构中,才能访问其他字段。

 

转载于:https://www.cnblogs.com/efinger/archive/2013/04/11/3013624.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值