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 域套接字)。
引用
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 域套接字)。
相关文章推荐
- LINUX 中关于struct timeval 的解释
- IP-level Socket Options
- INADDR_ANY的理解
- tcpdump@tshark用法
- 转帖:linux下wireshark安装和使用
- 四种IP广播地址
- ./configure -prefix 作用
- configure详解
- linux 下用gdb单步调试多进程
- iptables 指令详解
- 转:详述Linux后台运行命令 &
- 全面解析Linux profile文件
- linux使用工具记录
- 0512 Scrum 4.0
- Mongoose学习(1)
- Java构造器小结
- 第十一周进度条
- nodejs q模块
- 买视频送图书-五月活动
- VS2013下安装&编译Windows Caffe