Python Glossary English

все Python 3socketфункция

socket.getaddrinfo()

имена и адреса

Разрешает пару (хост, порт) в список готовых адресов для socket() и connect() — и для IPv4, и для IPv6.

Синтаксис

socket.getaddrinfo(host, port, family=AF_UNSPEC, type=0, proto=0, flags=0)

Это правильная замена gethostbyname: возвращает кортежи (family, type, proto, canonname, sockaddr), где sockaddr сразу передаётся в connect(). Без type= на один адрес приходит по записи на каждый тип сокета (STREAM, DGRAM, RAW) — список кажется задвоенным. Порт можно задать именем службы ('http'). Вызов блокирующий и тайм-аутом сокетов не ограничен; ошибка разрешения — socket.gaierror.

Примеры

import socket
for family, kind, proto, canon, sockaddr in socket.getaddrinfo('127.0.0.1', 80, type=socket.SOCK_STREAM):
    print(family.name, kind.name, sockaddr)  # → AF_INET SOCK_STREAM ('127.0.0.1', 80)
import socket
print(len(socket.getaddrinfo('127.0.0.1', 80)))  # → ? 3 — по записи на STREAM, DGRAM и RAW
print(socket.getaddrinfo('127.0.0.1', 'http', type=socket.SOCK_STREAM)[0][4])  # → ('127.0.0.1', 80)
import socket
try:
    socket.getaddrinfo('not-an-ip', 80, flags=socket.AI_NUMERICHOST)
except socket.gaierror as e:
    print(type(e).__name__)  # → gaierror

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности