Книга: UNIX: разработка сетевых приложений

Адрес отправителя и адрес получателя IPv6

Адрес отправителя и адрес получателя IPv6

IPv6-адрес отправителя обычно определяется при помощи функции bind. Но если адрес отправителя поставляется вместе с данными, это может снизить непроизводительные затраты. Этот параметр также позволяет серверу гарантировать, что адрес отправителя ответа совпадает с адресом получателя клиентского запроса — некоторым клиентам требуется такое условие, которое сложно выполнить в случае IPv4 (см. упражнение 22.4).

Когда IPv6-адрес отправителя задан в качестве вспомогательных данных и элемент ipi6_addr структуры in6_pktinfo имеет значение IN6ADDR_ANY_INIT, возможны следующие сценарии: если адрес в настоящий момент связан с сокетом, он используется в качестве адреса отправителя; если в настоящий момент никакой адрес не связан с сокетом, ядро выбирает адрес отправителя. Если же элемент ipi6_addr не является неопределенным адресом, но сокет уже связался с адресом отправителя, то значением элемента ipi6_addr перекрывается уже связанный адрес, но только для данной операции вывода. Затем ядро проверяет, действительно ли запрашиваемый адрес отправителя является адресом направленной передачи, присвоенным узлу.

Когда структура in6_pktinfo возвращается в качестве вспомогательных данных функцией recvmsg, элемент ipi6_addr содержит IPv6-адрес получателя из полученного пакета. По сути, это аналог параметра сокета IP_RECVDSTADDR для IPv4.

Оглавление книги


Генерация: 1.248. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз