Python Glossary Русский

all Python 3socketfunction

socket.getaddrinfo()

names and addresses

Resolves a (host, port) pair into a list of ready-made addresses for socket() and connect(), for both IPv4 and IPv6.

Syntax

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

This is the proper replacement for gethostbyname: it returns tuples (family, type, proto, canonname, sockaddr), and sockaddr goes straight into connect(). Without type= each address appears once per socket type (STREAM, DGRAM, RAW), so the list looks duplicated. The port may be a service name ('http'). The call blocks and is not bounded by socket timeouts; a resolution failure raises socket.gaierror.

Examples

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

See also

Common errors

Open in the full glossarydocs.python.orgReport an inaccuracy