[Python-Dev] socket.create_connection slow
Michael Foord
fuzzyman at voidspace.org.uk
Wed Jan 14 15:31:02 CET 2009
Victor Stinner wrote:
> Hi,
>
> Le Wednesday 14 January 2009 12:23:46 Kristján Valur Jónsson, vous avez
> écrit :
>
>> socket.create_connection() trying to connect to ("localhost", port)
>> (...)
>> return an AF_INET6 entry before the AF_INET one and try connection
>> to that. This connect() attemt fails after approximately one second,
>> after which we proceed to do an immediately successful connect() call
>> to the AF_INET address.
>>
>
> This is the normal behaviour of dual stack (IPv4+IPv6): IPv6 is tried before
> IPv4. SocketServer uses AF_INET by default, so the "IPv6 port" is closed on
> your host. Why does it take so long to try to connect to the IPv6 port? On
> Linux, it's immediate:
> ----
> $ time nc6 ::1 8080
> nc6: unable to connect to address ::1, service 8080
>
> real 0m0.023s
> user 0m0.000s
> sys 0m0.008s
> ----
>
> On my host (Ubuntu Gutsy), "localhost" name has only an IPv4 address. The
> address "::1" is "ip6-localhost" or "ip6-loopback".
>
> You should check why the connect() to IPv6 is so long to raise an error. About
> the test: since SocketServer address family is constant (IPv4), you can force
> IPv4 for the client.
>
>
This is something of a bugbear on Vista in general. Doing local
web-development with localhost can be really painful until you realise
that switching to 127.0.0.1 solves the problem...
Michael
More information about the Python-Dev
mailing list