我有一个代码,它列出了设备上的接口,并查找了给定名称和类型的接口:
ifaddrs * ifAddrs = nullptr;
getifaddrs(&ifAddrs);
for (ifaddrs * it = ifAddrs ; it != nullptr ; it = it->ifa_next)
{
if ((it->ifa_addr->sa_family == AF_INET) && (it->ifa_name == someInterfaceName))
{
// do stuff
}
}
现在我想添加IPv6支持,所以我修改了这样的代码(添加了af
变量):
ifaddrs * ifAddrs = nullptr;
getifaddrs(&ifAddrs);
int af = ipv6Code ? AF_INET : AF_INET6;
for (ifaddrs * it = ifAddrs ; it != nullptr ; it = it->ifa_next)
{
if ((it->ifa_addr->sa_family == af) && (it->ifa_name == someInterfaceName))
{
// do stuff
}
}
但我不知道它是否正确。也就是说,如果it->ifa_addr->sa_family
可能AF_INET6
或者它总是AF_INET
来描述互联网连接(无论IPv4与IPv6)?我找到了这个页面:https://www.tutorialspoint.com/unix_sockets/socket_structures.htm仅列出了AF_INET
,但是再次列出了此页面:how to get IPV6 interface address using getifaddr() function使用了AF_INET6
。那是哪一个呢?