重要的数据结构

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`