sockaddr
结构是Linux系统中用于表示网络地址和数据报头的通用结构
struct sockaddr {
sa_family_t sa_family; // 地址族,如AF_INET(IPv4)或AF_INET6(IPv6)
char sa_data[14]; // 包含具体地址信息的可变长度字段
};
在IPv4地址族中,sockaddr
结构通常如下所示:
struct sockaddr_in {
sa_family_t sin_family; // 地址族,总是设置为AF_INET
in_port_t sin_port; // 端口号
struct in_addr sin_addr; // IPv4地址
unsigned char sin_zero[8]; // 填充字节,通常为0
};
在IPv6地址族中,sockaddr
结构通常如下所示:
struct sockaddr_in6 {
sa_family_t sin6_family; // 地址族,总是设置为AF_INET6
in_port_t sin6_port; // 端口号
struct in6_addr sin6_addr; // IPv6地址
unsigned int sin6_scope_id; // 作用域ID,如接口索引
};
sockaddr
结构在套接字编程中非常重要,因为它允许您将地址和端口号与套接字关联起来。例如,当您使用bind()
函数将套接字绑定到特定地址和端口时,您需要提供sockaddr
结构作为参数。同样,在connect()
、recvfrom()
和sendto()
等函数中,您也需要使用sockaddr
结构来指定目标地址和端口。