linux 高性能读书笔记之通用socket地址
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,####socket网络编程接口socket的地址是结构体sockaddr代码如下struct sockaddr{sa_family_t sa_family;char sa_data[14];}sa_
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
为想互联网科技怎么样
深圳恒合互联网络科技有限公司
中国互联网科技股
盈实互联网科技
互联网与科技金融数据
麻工互联网科技
互联网科技小额贷款
上海亿帐通互联网科技
济南华为互联网科技产业总部基地
互联网校园科技培训
互联网为啥属于高科技
哈尔滨屹滨互联网科技有限公司
中国互联网十大科技股排名
互联网科技人工智能实验室
迪庆互联网科技招生
伊宁互联网科技做什么的
区块链结合互联网科技
浙南科技城互联网大厦招聘
萌小萌互联网科技河南有限公司
互联网高科技绘画
互联网高科技
互联网是第几次科技革命的成果
易互联网科技有限公司
互联网科技媒体
成都互联网科技公司
深圳天众互联网科技公司
移动互联网年度科技创新
恒生互联网科技指数跳水
互联网科技的前景
互联网科技创新方面的资料