Я хотел добавить поддержку IPv6 для моей программы и натолкнулся на странную ошибку.Я хочу открыть сокет, который принимает соединения.Вот мой сценарий:
Сначала я использую getaddrinfo (), чтобы найти конфигурацию сокета:
struct addrinfo hint, *info = NULL;
memset((void *)&hint, 0, sizeof(hint));
hint.ai_family = AF_INET6;
hint.ai_flags = AI_PASSIVE | AI_NUMERICSERV;
hint.ai_socktype = SOCK_STREAM;
if ((error = getaddrinfo(NULL, "1234", &hint, &info))) {
/* some error handling */
}
Я получаю ненулевой результат в info
.Затем я хочу создать сокет:
socket(info->ai_family, info->ai_socktype, info->ai_protocol)
Здесь я получаю -1
strerror(errno)
возвращает Address family not supported by protocol
Я думал, что getaddrinfo()
возвращает только адресаэто может быть связано, и я ожидал бы, что это возвратит NULL в этом случае.Чего мне не хватает?
Хочу добавить, что у моего eth0 сейчас нет IPv6-адреса.Я использую uClibc 0.9.32