Very slow opening of client connections to localhost with httplib
fuzzey at besancon.sema.slb.com
Fri Dec 12 18:51:08 CET 2003
I am using xmlrpclib (based on httplib) in Python 2.3 on Mandrake
When my client attempts to connect to a server using a
"http://localhost:port" style URL there is a long delay before the
connection is established (it finally works).
This certainly smells a name resolution problem but ping localhost,
telnet localhost etc all work fine.
Tracking down a bit it appears that the problem comes from the
getaddrinfo() call in code in HttpConnection.connect() :
"""Connect to the host and port specified in __init__."""
msg = "getaddrinfo returns an empty list"
for res in socket.getaddrinfo(self.host, self.port, 0,
To test this I did :
socket.getaddrinfo("localhost", 10000, 0, socket.SOCK_STREAM)
and sure enough it blocked for several seconds before finally
If I remplace the 0 in the getaddrinfo call above by socket.AF_INET
all is fine as well.
So I did a tcpdump to see what it was sending to the nameserver and
18:36:01.790045 X.Y.Z.41.32961 > X.Y.Z.12.53: 42057+ AAAA?
localhost.besancon.parkeon.com. (48) (DF)
18:36:01.790526 X.Y.Z.12.53 > X.Y.Z.41.32961: 42057* 0/1/0 (95)
18:36:01.790652 X.Y.Z.41.32961 > X.Y.Z.12.53: 42058+ AAAA? localhost.
18:36:06.792898 X.Y.Z.41.32962 > X.Y.Z.215.53: 42058+ AAAA?
localhost. (27) (DF)
18:36:06.793134 X.Y.Z.215.53 > X.Y.Z.41.32962: 42058 ServFail 0/0/0
18:36:06.793301 X.Y.Z.41.32962 > X.Y.Z.12.53: 42058+ AAAA? localhost.
18:36:11.802998 X.Y.Z.41.32963 > X.Y.Z.215.53: 42058+ AAAA?
localhost. (27) (DF)
18:36:11.803222 X.Y.Z.215.53 > X.Y.Z.41.32963: 42058 ServFail 0/0/0
18:36:13.356344 X.Y.Z.12.53 > X.Y.Z.41.32959: 42056 ServFail 0/0/0
(my machine is X.Y.Z.41 and the NS is X.Y.Z.12)
When AF_INET or gethostbyname() is used there is no network
This appears to be a problem with IPV6 DNS queries?? (the AAAA
records). We don't use IPV6 but the 0 parameter (AF_UNSPEC) used in
httplib seems to cause them to be sent.
Anyone else had this problem or got any ideas?
The problem does NOT occur under windows.
More information about the Python-list