struct sock_addr 和struct sock_addr_in的区别与联系
来源:互联网 发布:网络视频广告收入 编辑:程序博客网 时间:2024/06/16 04:50
一、数据结构
1.用户态的数据结构
struct sockaddr_in {
__kernel_sa_family_t sin_family;/* Address family */
__be16 sin_port;/* Port number */
struct in_addr sin_addr;/* Internet address */
/* Pad to size of `struct sockaddr'. */
unsigned char __pad[8];
};
注:__SOCK_SIZE__ - sizeof(short int) - sizeof(unsigned short int) - sizeof(struct in_addr) = 8;
2.内核态数据结构
struct sockaddr {
sa_family_t sa_family; /* address family, AF_xxx*/
char sa_data[14];/* 14 bytes of protocol address*/
};
二、联系
用户态和内核态的数据结构是对应的,那么他们之间的联系就是在sockaddr中的char sa_data[14]中,前两个字节代表sockaddr_in中的 16位sin_port(端口),紧接着的四个字节代表sockaddr_in中的sin_addr(ip地址),为了保持二者之间的长度相同,则会在用户态的sockaddr_in中的最后加0补齐(14补齐)。
即如下关系
struct sockaddr_in {
short sin_family; // 2 bytes e.g. AF_INET, AF_INET6
unsigned short sin_port; // 2 bytes e.g. htons(3490)
struct in_addr sin_addr; // 4 bytes see struct in_addr, below
char sin_zero[8]; // 8 bytes zero for alignning to kernel's sockaddr structure
};
so there is to be a map: bytes(port) : bytes(ip addr): bytes(aligned zeros) = 2:4:8
|------|------------|------------------------|
port ip addr aligned zeros
- struct sock_addr 和struct sock_addr_in的区别与联系
- struct与typedef struct区别和联系
- 【转】struct sockaddr与struct sockaddr_in的区别和联系
- struct sockaddr与struct sockaddr_in的区别和联系
- 【转】struct sockaddr与struct sockaddr_in的区别和联系
- struct sockaddr与struct sockaddr_in的区别和联系
- struct sockaddr与struct sockaddr_in的区别和联系
- struct sockaddr与struct sockaddr_in的区别和联系
- struct sockaddr与struct sockaddr_in的区别和联系
- struct sockaddr与struct sockaddr_in的区别和联系
- union 和 struct 的区别与联系
- union 和 struct 的区别与联系
- struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
- struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
- struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
- struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
- struct in_addr,struct sockaddr与struct sockaddr_in的区别和联系
- struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
- 机器学习算法比较
- Matlab常用命令
- Linux CentOS 6.6安装JDK1.7
- netty源码分析 之七 transport(Unsafe)
- 深入理解Java虚拟机4~类文件结构
- struct sock_addr 和struct sock_addr_in的区别与联系
- 多线程应用于自动化测试
- 关键字static
- 写标流程学习总结
- 获得每个用户的最后一条记录
- 使用copy函数输出vector中的内容
- Cooja 中自定义 Java Mote 使用 Collect-View
- 使用POTEUS软件来进行模拟仿真 8086汇编语言花式跑马灯课程设计及代码
- jquery 全选、反选、即点即改