socket.getaddrinfo ()
socket.getaddrinfo ( host, port, family=0, type=0, proto=0, flags=0 )
Преобразует аргументы host/port в последовательность из кортежа с 5 членами, которые содержат все необходимые аргументы для создания сокета, подключенного к этой службе. host - это доменное имя, строковое представление адреса IPv4/v6 или None
. port - это строковое имя службы, такое как 'http'
, числовой номер порта или None
. Передав None
в качестве значения host и port, вы можете передать NULL
в базовый API C.
Аргументы семейства family, типа type и прототипа proto могут быть дополнительно указаны, чтобы сузить список возвращаемых адресов. Передача нуля в качестве значения для каждого из этих аргументов выбирает полный диапазон результатов. Аргумент flags может быть одной или несколькими константами AI_*
и будет влиять на способ вычисления и возврата результатов. Например, AI_NUMERICHOST
отключит разрешение доменного имени и вызовет ошибку, если host является доменным именем.
Функция возвращает список из кортежа с 5 элементами со следующей структурой:
(family, type, proto, canonname, sockaddr)
В этих кортежах family, type, proto являются целыми числами и предназначены для передачи в функцию socket (). canonname будет строкой, представляющей каноническое имя хоста host, если AI_CANONNAME
является частью аргумента flags; иначе canonname будет пустым. sockaddr - это кортеж, описывающий адрес сокета, формат которого зависит от возвращаемого семейства family (кортеж с 2 элементами (address, port)
для AF_INET, кортеж с 4 элементами (address, port, flowinfo, scope_id)
для AF_INET6) и предназначен для передачи в метод socket.connect ().
Вызывает событие аудита socket.getaddrinfo
с аргументами host, port, family, type, protocol.
В следующем примере извлекается адресная информация для гипотетического TCP-соединения с example.org
через порт 80 (результаты могут отличаться в вашей системе, если IPv6 не включен):
>>> socket.getaddrinfo("example.org", 80, proto=socket.IPPROTO_TCP)
[(<AddressFamily.AF_INET6: 10>, <SocketType.SOCK_STREAM: 1>,
6, '', ('2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0)),
(<AddressFamily.AF_INET: 2>, <SocketType.SOCK_STREAM: 1>,
6, '', ('93.184.216.34', 80))]
Изменено в версии 3.2: параметры теперь можно передавать с помощью ключевых аргументов.
Изменено в версии 3.7: для адресов многоадресной рассылки IPv6 строка, представляющая адрес, не будет содержать %scope_id
часть.
Last updated
Was this helpful?