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