调用getifaddrs

时间:2016-10-26 11:26:32

标签: c++ network-programming

我有一个代码,它列出了设备上的接口,并查找了给定名称和类型的接口:

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。那是哪一个呢?

0 个答案:

没有答案