重要的数据结构
struct sockaddr
通信用的地址表, 记录了使用什么来通信和目的地址
这是一个在套接字编程中用来表示"地址"的通用结构, 核心作用是为不同的通行提供一个统一的地址表示接口
struct sockaddr {
sa_family_t sa_family; // 地址族(如 AF_INET, AF_UNIX)
char sa_data[14]; // 地址数据(具体含义取决于 sa_family)
};
struct sockaddr有很多变体, 适用于不同的通信类型, 但第一项必须是sa_family_t sa_family
内核通过识别sa_family, 来决定使用何种协议栈处理信息
常见的struct sockaddr有
| 结构体 | 用途 | sa_family |
|---|---|---|
struct sockaddr |
通用地址结构(抽象基类) | AF_UNSPEC,AF_INET, 等 |
struct sockaddr_in |
IPv4 地址 + 端口 | AF_INET |
struct sockaddr_in6 |
IPv6 地址 + 端口 | AF_INET6 |
struct sockaddr_un |
Unix 域套接字(本地通信) | AF_UNIX/AF_LOCAL |
struct sockaddr_ll |
链路层地址(如抓包用) | AF_PACKET |
struct sockaddr_nl |
Netlink 套接字 | AF_NETLINK |
struct sockaddr_storage |
足够大的通用结构,用于存储任意地址 | 任意 |
在使用socket编程时, 调用的函数的参数中需要将所有的``socket_xx转换成struct sockaddr`