socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0)
Translate the host/port argument into a sequence of 5-tuples that contain all the necessary arguments for creating a socket connected to that service. host is a domain name, a string representation of an IPv4/v6 address or None
. port is a string service name such as 'http'
, a numeric port number or None
. By passing None
as the value of host and port, you can pass NULL
to the underlying C API.
The family, type and proto arguments can be optionally specified in order to narrow the list of addresses returned. Passing zero as a value for each of these arguments selects the full range of results. The flags argument can be one or several of the AI_*
constants, and will influence how results are computed and returned. For example, AI_NUMERICHOST
will disable domain name resolution and will raise an error if host is a domain name.
The function returns a list of 5-tuples with the following structure:
(family, type, proto, canonname, sockaddr)
In these tuples, family, type, proto are all integers and are meant to be passed to the socket()
function. canonname will be a string representing the canonical name of the host if AI_CANONNAME
is part of the flags argument; else canonname will be empty. sockaddr is a tuple describing a socket address, whose format depends on the returned family (a (address, port)
2-tuple for AF_INET
, a (address, port, flow info, scope id)
4-tuple for AF_INET6
), and is meant to be passed to the socket.connect()
method.
The following example fetches address information for a hypothetical TCP connection to example.org
on port 80 (results may differ on your system if IPv6 isn’t enabled):
>>> 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))]
Changed in version 3.2: parameters can now be passed using keyword arguments.
Please login to continue.