linux 高性能读书笔记之通用socket地址
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,####socket网络编程接口socket的地址是结构体sockaddr代码如下struct sockaddr{sa_family_t sa_family;char sa_data[14];}sa_
千家信息网最后更新 2025年12月04日linux 高性能读书笔记之通用socket地址
####socket网络编程接口
socket的地址是结构体sockaddr
代码如下
struct sockaddr{
sa_family_t sa_family;
char sa_data[14];
}
sa_family 成员是地址族类型(sa_family_t)变量。
地址族类型通常与协议族类型对应
1.二者对应表
| 协议族 | 地址表 | 描述 |
|---|---|---|
| PF_UNIX | AF_UNIX | UNIX本地域协议族 |
| PF_INET | AF_INET | TCP/IPv4协议族 |
| PF_INET6 | AF_INET6 | TCP/IPv6协议族 |
二者定义在bits/socket.h头文件,值一样,所以二者经常混用
sa_data成员用于存放socket地址值
但是不同的协议族的地址值具有不同的含义和长度
| 2.协议族及其地址值 | 协议族 | 地址值含义和长度 |
|---|---|---|
| PF_UNIX | 文件的路径名,长度可达108字节 |
| 协议族 | 地址值含义和长度 |
|---|---|
| PF_INET | 16bit 端口号和32bit IPv4地址 |
| PF_UNIX | 文件的路径名,长度可达108字节 |
| PF_INET6 | 16bit 端口号,32bit流标识,128bitIPv6地址,32bit范围ID,共26字节 |
問題:14字节的sa_data无法容纳多数协议族的地址值,因此linux定义了新的通用socket地址结构体
struct sockaddr_storage{
sa_family_t sa_family unsigned long int __sa_align; char __ss_padding[128-sizeof(__ss_align)];}
ssalign:用于内存对齐
3.专用socket地址
问题: 上述通用结构体很不好用,设置与获取IP地址和端口号需要执行繁琐的位操作。
解决:linux为各个协议族提供了专门的socket地址结构体
3.1
UNIX本地域协议族:
struct sockaddr_un{
sa_family_t sin_family; //地址族AF_UNIX
char sun_path[108]; // 文件路径名
} TCP/IP协议族有了两个专用 struct socketaddr_in{ sa_family_t sin_family; //地址族AF_INET u_int16_t sin_port; //端口号,要用网络字节序表示 struct in_addr sin_addr; //Ipv4地址结构体 } struct in_addr{ u_int32_t s_addr;//IPv4地址,要用网络字节序表示 } struct socketaddr_in6{ sa_family_t sin6_family; //地址族AF_INET u_int16_t sin6_port; //端口号,要用网络字节序表示 u_int32_t sin6_flowinfo; //流信息,设置为0 struct in6_addr sin6_addr; //Ipv6地址结构体 u_int32_t sin6_scope_id; //scope_id实验用 } struct in6_addr{ unsigned char sa_addr[16];//IPv6地址,要用网络字节序表示 } 使用说明:所有专用地址类型的变量在实际使用中都需要转化为通用socket地址类型sockaddr(强制转换) 原因:所有的socket变成接口使用的地址参数的类型为sockaddr 4.IP地址转换函数 IPv4:点分十进制字符串 IPv6:16进制字符串 in_addr_t inet_addr (const char * strptr); int inet_aton(const char * cp, struct in_addr * inp); char * inet_ntoa(struct in_addr in);
地址
字节
类型
结构
口号
网络
长度
文件
含义
路径
路径名
专用
不同
变量
字符
字符串
成员
接口
繁琐
不好
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
linux数据库中文乱码
华为可信软件开发考试答案
吴忠市软件开发公司联系电话
com域服务器
联想服务器rs260参数
邮箱登录显示请检查服务器信息
shell服务器怎么搭建
需要紧急连接网络访问公司服务器
阿里巴巴使用的数据库
关于网络安全的一副画
魔兽游戏一直在登录服务器状态
上海夺汇网络技术有限公司干啥的
湖北计算机应用软件开发报价
武汉网络技术大楼
2021年国际网络安全事件
用数据库统计广告位出租
大学信息与网络技术基础书
慧连接提示与服务器的连接已断开
第六届大学生网络安全大赛
网络安全知识普法新闻稿
烽火服务器如何组raid
亳州专业电商进销存软件开发费用
计算机 网络技术自我介绍
美国科技互联网公司
vba中选中最后一行数据库
中国电信酒店网络安全
闪耀暖暖各个服务器可以连通吗
在数据库应用中函数指的是什么
sqllite选择数据库
网络安全文章高中