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

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_);

PIPIONE
浏览 71回答 2
2回答

繁花不似锦

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

紫衣仙女

其定义如下:typedefunsignedshortintsa_family_t;#define__SOCKADDR_COMMON(sa_prefix)\sa_family_tsa_prefix##family可以看到这就是一个整形变量(2字节),主要的用处是指明地址类型:取值主要是AF_UNIX|AF_INET|AF_INET6|AF_PACKET等等。由于所有的地址结构体必然有地址类型,因此封装成一个统一的宏。 
打开App,查看更多内容
随时随地看视频慕课网APP