как связать ссылку локальный адрес с сокетом ipv6

Этот вопрос можно рассматривать как вопрос о сестре предыдущего, отправленного один. Это очень утомительно, что, когда Вы хотите связать ссылку локальный адрес с сокетом IPv6, необходимо установить sin6_scope_id поле sockaddr_in6 структура. Я задаюсь вопросом, может ли кто-то предоставить решение после хорошей практики.

8
задан Community 23 May 2017 в 11:52
поделиться

2 ответа

Локальный адрес канала IPv6 не уникален на узле, он уникален только для сетевой карты, поэтому вам необходимо указать идентификатор области. Другими словами, вполне допустимо иметь несколько адаптеров с одним и тем же IPv6-адресом.

Это означает, что вы должны принять в качестве входных данных идентификатор области действия или подходящую текстовую форму (% eth0,% 1), которую вы можете передать в getaddrinfo () .

Один из методов состоит в том, чтобы взять локальный адрес канала IPv6, перечислить интерфейсы, и если только один соответствует, использовать его, если более одного совпадения, то выйдите со списком интерфейсов и попросите пользователя указать, какой из них полностью форма.

11
ответ дан 5 December 2019 в 10:02
поделиться

Проблема возникает только при жестком кодировании локального адреса ссылки, что не является практическим решением для нетривиального приложения.

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

3
ответ дан 5 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: