在 Linux 系统中,sockaddr
是一个通用结构体,用于表示网络地址
sockaddr
结构体通常包含以下几个成员:
sa_family
:表示地址族,用于区分不同类型的网络地址(例如 IPv4 或 IPv6)。sa_data
:包含具体的地址信息,其长度取决于地址族。对于 IPv4 地址,它是一个 16 字节长的数组;对于 IPv6 地址,它是一个 28 字节长的数组。下面是一些常见的 sockaddr
子类型:
sockaddr_in
:用于表示 IPv4 地址。它是从 sockaddr
结构体派生出来的,包含一个 sin_family
成员(通常设置为 AF_INET)和一个 sin_port
成员(表示端口号)。sin_addr
成员包含一个 IPv4 地址的二进制表示。
sockaddr_in6
:用于表示 IPv6 地址。它也是从 sockaddr
结构体派生出来的,包含一个 sin6_family
成员(通常设置为 AF_INET6)和一个 sin6_port
成员(表示端口号)。sin6_addr
成员包含一个 IPv6 地址的二进制表示。
在 Linux 中,当你使用套接字编程(如 TCP 或 UDP)时,你需要将 sockaddr
结构体与套接字关联起来。例如,在使用 bind()
函数绑定套接字到一个地址时,你需要传递一个指向 sockaddr
结构体的指针。同样,在使用 connect()
、recvfrom()
和 sendto()
等函数时,你也需要使用 sockaddr
结构体来表示远程地址或接收数据包的来源地址。