据我所知,sockaddr结构包括:
struct sockaddr
{
unsigned short sa_family;
char sa_data[14];
}; `
如果我已经拥有结构数据:我如何从那里获得IP?
答案 0 :(得分:1)
您需要将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
则可以分别从sin6_addr
和sin6_port
获取IP地址和端口号。