Я думаю, у вас нет действительной конфигурации IPv6. getaddrinfo()
будет возвращать только доступные ответы по IPv6, поэтому если в вашей системе нет адреса IPv6 с глобальной областью действия и маршрута к разрешенному адресу, результат будет удален из набора результатов.
Основная идея заключается в том, что вы вызываете getaddrinfo
один раз и получаете список адресов для подключения - если бы этот список включал недоступные адреса, программы должны были бы сначала запустить тайм-аут, прежде чем пытаться использовать другой адрес.
«Семейство адресов для имени хоста не поддерживается» означает, что он распознал, что адрес является IPv6-адресом, который не нужно разрешать через DNS, поэтому он пытается сопоставить его со списком разрешенных семейств адресов, выдает ошибку и возвращает ошибку .
Разрешение имени хоста пытается получить запись "A" для имени хоста, поскольку это подходит для единственного семейства адресов, поддерживаемых локально. Такой записи не существует, поэтому она возвращает информацию о том, что записи не существует. Поскольку он никогда не запрашивал адрес IPv6 (это было бы бессмысленно), он не жалуется на несоответствие семейства адресов.