все 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Сообщить о неточности