[Python-3000] IPv6 address tuple
Jun-ichiro itojun Hagino
itojun at itojun.org
Tue Apr 3 08:54:57 CEST 2007
> | > i understand your concern. current 4-tuple is direct mapping from
> | > struct sockaddr_in6 (which has those two additional members).
> | note however, you must rewrite DNS resolving from gethostby* to
> | get*info anyways, so i'm not too sure if the number of tuple members in
> | sockaddr matters that much.
> This is true when using explicit DNS resolving, but Python socket API
> allows you to pass in a string in place of the address in the tuple,
> and then resolves it to an address behind your back. This
> is probably the most common way of using DNS in Python.
> It seems that when you have an AF_INET6 socket, it looks for
> an AAAA record, and when you have an AF_INET socket, it goes for A.
hmm. how would Python behave when there are multiple AAAA (or A)
records? just pick the first one?
> Unfortunately this bumps the address family-agnostic get*info API
> to second place in the convenience-of-use competition
> (getaddrinfo example at <http://docs.python.org/lib/socket-example.html>).
with mixed IPv4/v6 environment (this would be the network environment
for today and coming decade(s)), a program should try to connect both
A and AAAA records, since connectivity situation varies by
configuration such as network configuration, kernel compilation options
and so forth.
for this reason it would be better (or i might say we have to)
for all libraries (like HTTP, FTP, and stuff) as well as user
applications to use get*info API, instead of just building a tuple and
then use AF_INET/6 socket.
More information about the Python-3000