sockaddr和sockaddr_in

本文详细介绍了通用的套接口地址结构sockaddr及其IPv4特化版本sockaddr_in。从应用程序开发人员的角度出发,解释了如何在不同协议间进行指针类型转换,并探讨了sin_zero成员的兼容性作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sockaddr
struct sockaddr为通用的套接口地址结构,在头文件<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*/                

};
sockaddr_in
struct sockaddr为IPv4套接口地址结构,在头文件<netinet/in.h>中定义,结构定义如下:
struct sockaddr_in{

          uint8_t        sin_len;                        /*length of structure(16)*/

          sa_family_t sin_family;                     /*AF_INET*/

          in_port_t     sin_port;                       /*16-bit TCP or UDP port number, network byte ordered*/

          struct in_addr sin_addr;                  /*32-bit IPv4 address, network byte ordered*/

          char           sin_zero[8];                   /*unused*/

};
使用通用的套接口地址结构的原因是:从应用程序开发人员角度来看,是给指向特定于协议的地址结构的指针转换类型;
而从内核的角度来看,内核必须依据调用者的指针,转换为struct sockaddr*,然后坚持sa_family的值确定结构的类型。
其中成员sin_zero暂时没有使用到,用来扩充功能,一般在使用时将其初始化为0,事实上,Posix.1g只需要这个结构中的三个成员sin_family、sin_port和sin_addr,加入其他的两项完全是为了兼容性考虑的。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值