从sockaddr获取IP

时间:2013-06-12 18:46:29

标签: sockets struct ip

据我所知,sockaddr结构包括:

struct sockaddr 
{   
    unsigned short sa_family;  
    char sa_data[14];          
}; `

如果我已经拥有结构数据:我如何从那里获得IP?

1 个答案:

答案 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_addrsin6_port获取IP地址和端口号。