为了账号安全,请及时绑定邮箱和手机立即绑定

这句代码是什么意思呢,初学socket编程,请大虾不吝指教?

这句代码是什么意思呢,初学socket编程,请大虾不吝指教?

PIPIONE 2022-11-17 18:14:14

struct sockaddr_in { __SOCKADDR_COMMON (sin_); in_port_t sin_port; //端口号 struct in_addr sin_addr; //IP地址 unsigned char sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)]; //使与sockaddr长度一致 }; 上面这个结构体是Linux in.h头文件中定义的,那么开头的__SOCKADDR_COMMON (sin_);

查看完整描述

2 回答

?
繁花不似锦

TA贡献1566条经验 获得超4个赞

__SOCKADDR_COMMON
();是宏定义的意思,括号里面是它的参数,这个宏定义表示的是tcp/ip协议的版本是,ipv4还是ipv6的意思,最后的那个unsigned
char
sin_zero的大小为什么做减法呢,是为了保证这个结构提到大小和另一个套接字地址的结构体struct
sockaddr的大小一致。这么说不知道你能不能不能理解,第一个参数在实际使的时候一般是个常数。
再看看别人怎么说的。

查看完整回答
反对 回复 6天前
?
紫衣仙女

TA贡献1539条经验 获得超15个赞

其定义如下:
typedef
unsigned
short
int
sa_family_t;
#define
__SOCKADDR_COMMON(sa_prefix)
\
sa_family_t
sa_prefix##family
可以看到这就是一个整形变量(2字节),主要的用处是指明地址类型:取值主要是AF_UNIX|AF_INET|AF_INET6|AF_PACKET等等。
由于所有的地址结构体必然有地址类型,因此封装成一个统一的宏。

 


查看完整回答
反对 回复 6天前

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信