Шрифт:
Входные данные функции
Семейством адресов, указанным вызывающим процессом в структуре
POSIX утверждает, что при задании семейства
Это утверждение POSIX также подразумевает, что если флаг
Семейство адресов, указанное в поле
Имя узла может также быть либо шестнадцатеричной строкой IPv6, либо строкой в точечно-десятичной записи IPv4. Допустимость этой строки зависит от семейства адресов, заданного вызывающим процессом. Шестнадцатеричная строка IPv6 неприемлема, если задано семейство
Можно возразить, что если в качестве семейства протоколов задано AF_INET6, строка в точечно-десятичной записи должна возвращаться как адрес IPv4, преобразованный к виду IPv6 в структуре sockaddr_in6. Но другим способом получения этого результата является установка префикса строки с десятичной точкой 0::ffff:.
В табл. 11.3 показано, как будут обрабатываться адреса IPv4 и IPv6 функцией
Таблица 11.3. Функция getaddrinfo: ее действия и результаты
Имя узла, указанное вызывающим процессом | Семейство адресов, указанное вызывающим процессом | Строка с именем узла содержит | Результат | Действия |
---|---|---|---|---|
Ненулевая строка с именем узла; активное или пассивное открытие | AF_UNSPEC | Имя узла | Все записи AAAA возвращаются как структуры sockaddr_in6{} и все записи А возвращаются как структуры sockaddr_in{} | Поиск по записям AAAA и поиск по записям A |
Шестнадцатеричная строка | Одна структура sockaddr_in6{} | inet_pton(AF_INET6) | ||
Строка в точечно- десятичной записи | Одна структура sockaddr_in{} | inet_pton(AF_INET) | ||
AF_INET6 | Имя узла | Все записи AAAA возвращаются как структуры sockaddr_in6{} либо все записи А возвращаются как структуры sockaddr_in6{} с адресами IPv4, преобразованными к виду IPv6 | Поиск по записям AAAA | |
Шестнадцатеричная строка | Одна структура sockaddr_in6{} | inet_pton(AF_INET6) | ||
Строка в точечно-десятичной записи | Ищется как имя узла | |||
AF_INET | Имя узла | Все записи А возвращаются как структуры sockaddr_in{} | Поиск по записям типа A | |
Шестнадцатеричная строка | Ошибка: EAI_ADDRFAMILY | |||
Строка в точечно-десятичной записи | Одна структура sockaddr_in{} | inet_pton(AF_INET) | ||
Пустая строка с именем узла; пассивное открытие | AF_UNSPEC | Неявный адрес 0::0 Неявный адрес 0.0.0.0 | Одна структура sockaddr_in6{} и одна структура sockaddr_in{} | inet_pton(AF_INET6) inet_pton(AF_INET) |
AF_INET6 | Неявный адрес 0::0 | Одна структура sockaddr_in6{} | inet_pton(AF_INET6) | |
AF_INET | Неявный адрес 0.0.0.0 | Одна структура sockaddr_in{} | inet_pton(AF_INET) | |
Пустая строка с именем узла; активное открытие | AF_UNSPEC | Неявный адрес 0::1 Неявный адрес 127.0.0.1 | Одна структура sockaddr_in6{} и одна структура sockaddr_in{} | inet_pton(AF_INET6) inet_pton(AF_INET) |