Есть ли способ программно проверить, установлен ли IPv6 / включен в Windows с помощью C ++?Либо на уровне интерфейса, либо в масштабе всей системы.
При наличии большого количества сетевых ресурсов проще всего попытаться использовать его и перехватить исключения в случае сбоя.
WSCEnumProtocols() можно использовать для проверки, установлен ли IPv6 в качестве протокола.
WSCEnumProtocols()
Одним из ответов будет перечисление системных интерфейсов с использованием GetAdapterAddresses() и поиск адреса IPv6.
GetAdapterAddresses()
Помните, что в XP необходимо запустить ipv6 install до того, как IPv6 станет доступен, поэтому он немного сложнее, чем вы думаете.
ipv6 install
Проще всего попробовать открыть сокет,
const int sock6 = socket (AF_INET6, SOCK_DGRAM, 0); const BOOL is_ip6_enabled = (SOCKET_ERROR != sock6); close (sock6);