linux sockaddr,linux – 为什么我们可以将sockaddr转换为sockaddr_in

这是可能的,因为你通常会投掷指针,而不是结构本身.你做自然语言的意思是“请把这个指针指向一个socket结构作为一个指向互联网套接字结构的指针”.编译器没有问题重新解释指针.

这是从评论中得到的更详细的描述:

一个sockaddr是16个字节的大小 – 前两个字节是sa_family,剩下的14个字节是任意数据的sa_data.一个sockaddr_in也是16字节的大小 – 前2个字节是sin_family(总是AF_INET),接下来的2个字节是sin_port,接下来的4个字节是sin_addr(IP地址),最后8个字节是sin_zero,在IPv4中未使用,仅提供1​​6个字节.这样,首先可以看看sockaddr.sa_family,如果是AF_INET,则将整个sockaddr解释为sockaddr_in.

sockaddr_in不存储在sockaddr.sa_data字段内.整个sockaddr是整个sockaddr_in(当sockaddr.sa_family是AF_INET时,就是这样).如果您使用一个sockaddr *指针并将其转换为一个sockaddr_in *指针,那么:

> sockaddr.sa_family是sockaddr_in.sin_family> sockaddr.sa_data的字节0-1为sockaddr_in.sin_port>字节2-5是sockaddr_in.sin_addr>字节6-13是sockaddr_in.sin_zero.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值