据我所知,一个 sockaddr 结构包括:
struct sockaddr
{
unsigned short sa_family;
char sa_data[14];
}; `
如果我已经有了结构数据:如何从那里获取 IP?
您需要将其struct sockaddr
转换为取决于系列的特定子类:
AF_UNIX
,struct sockaddr
将struct sockaddr_un
AF_INET
,struct sockaddr
将struct sockaddr_in
AF_INET6
,struct sockaddr
将struct sockaddr_in6
一旦将结构转换为后一种类型,就可以从该结构中获取地址。请注意,每个协议的地址格式不同,包含它们的字段的名称和类型也不同。例如,如果家族是AF_UNIX
您可以从中获取路径名sun_path
(在这种情况下没有 IP 地址之类的东西),而如果家族是您可以分别从和AF_INET6
获取 IP 地址和端口号。sin6_addr
sin6_port