Сбой с привязкой () к IPv6-адресу в Windows 7 с кодом ошибки :: WSAEADDRNOTAVAIL (10049) - PullRequest
2 голосов
/ 17 мая 2011

Я пытаюсь настроить частную сеть ipv6 с двумя компьютерами Windows-7 для тестирования моего приложения.Я написал пример кода для тестирования API сокета.Я создал сокет IPv6.Когда я пытаюсь связать с локальным адресом ссылки (который я получаю из команды ipconfig ), код ошибки равен 10049.

Пожалуйста, сообщите, почему bind с IPv6-адресом не работает в Windows-7?

1 Ответ

2 голосов
/ 19 июня 2011

Если вы используете локальный IPv6-адрес для связи, вам, вероятно, нужно установить поле sin6_scope_id в структуре sockaddr_in6, чтобы указать, какой интерфейс вы хотите прослушивать. Локальный адрес канала является неоднозначным, поскольку каждому интерфейсу должен быть присвоен локальный адрес канала , и все они используют один и тот же префикс. (fe80::/64)

Вы, вероятно, должны bind() свой сокет прослушивания по неопределенному адресу (все нули или ::), так что это не проблема, но все равно будет проблемой для отправляющей стороны. Если вы не укажете sin6_scope_id, система не будет знать, на какой интерфейс отправлять пакет.

Чтобы избежать этой проблемы, было бы лучше настроить маршрутизатор IPv6, который будет объявления маршрутизатора , чтобы вы могли получить global unicast (или, как минимум, уникальные локальные ) адреса.

...