您的位置:首页 > 其它

struct sockaddr定义及延伸

2016-05-15 22:11 309 查看
跟踪看一下 strcut sockaddr 是怎么定义的,这个定义在 /usr/include/bits/socket.h里

引用

struct
sockaddr

{

__SOCKADDR_COMMON (sa_);

char
sa_data[14];

};

由上可见,sockaddr 结构体的第一个成员是一个宏定义,再来看一下这个宏定义(在/usr/include/bits/sockaddr.h 里):

引用

#define __SOCKADDR_COMMON(sa_prefix)sa_family_t sa_prefix##family

由注释可知,利用这个宏,我们根据需要,在 sockaddr 里可以填入不同的地址类型规范,如 struct sockaddr,struct sockaddr_in,struct sockaddr_un 等。

同样在 /usr/include/bits/sockaddr.h里看到上面的 sa_family_t 的原型是:

引用

typedef
unsigned short
int
sa_family_t;

由此可见,是个无符号短整型。

例如,我们用的是 UNIX 域套接字,那么可以在 /usr/include/sys/un.h 中观察到 sockaddr_un的定义:

引用

struct
sockaddr_un

{

__SOCKADDR_COMMON (sun_);

char
sun_path[108];

};

那么,根据上面的 __SOCKADDR_COMMON 的定义,可知结构体中的第一个成员为:

sun_family

所以,这个结构题可改写为:

struct
sockaddr_un

{

sa_family_t sun_family ;

char
sun_path[108];

};[/quote]

由于 sa_family 是无符号整型,而在 /usr/include/bits/socket.h 里定义的协议类型 (PF_XXX(实际上被重定义为 AF_XXX) 便可以赋给 sun_family,如 selfdefine_address.sun_family= AF_UNIX (表示使用 UNIX 域套接字)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: