[Python-Dev] socket recv on win32 can be extremly delayed (python bug?)

Robert Hölzl robert.hoelzl at baltech.de
Thu Apr 17 12:08:41 CEST 2008


hello,

I tried to implement a simple python XMLRPC service on a win32 
environment (client/server code inserted below).
The profiler of the client told me, that a simple function call needs 
about 200ms (even if I run it in a loop, the time needed per call stays 
the same).

After analysing the problem with etherreal I found out, that the XMLRPC 
request is transmitted via two TCP packets. One containing the HTTP 
header and one containting the data. But the acknowledge to the first 
TCP packet is delayed by 200ms.

I tried around on the server side and found out that if the server reads 
exactly all bytes transfered in the first TCP frame (via socket.recv()), 
the next socket.recv(), even if reading only one byte, needs about 200 
ms. But if I read one byte less than transfered in the first TCP frame 
and then reading 2 bytes (socket.recv(2)) there is no delay, although 
the same total amount of data was read.

After some googling I found the website 
http://support.microsoft.com/?scid=kb%3Ben-us%3B823764&x=12&y=15, which 
proposed a workaround (modifing the registryentry for the tcp/ip driver) 
that did work. But modifing the clients registry settings is no option 
for us.

Is there anybody who nows how to solve the problem? Or is it even a 
problem if the python socket implementation?

By the way: I testet Win2000 SP4 and WinXP SP2 with Python 2.3.3 and 
Python 2.5.1 each.

CLIENT:
----------
import xmlrpclib
import profile
server = xmlrpclib.ServerProxy("http://server:80")
profile.run('server.test(1,2)')

SERVER:
----------
import SimpleXMLRPCServer
def test(a,b): return a+b
server = SimpleXMLRPCServer.SimpleXMLRPCServer( ('', 80) )
server.register_function(test)
server.serve_forever()

-- 
Mit freundlichen Grüßen,
Best Regards,

Robert Hölzl
BALTECH AG

Firmensitz: Lilienthalstrasse 27, D-85399 Hallbergmoos
Registergericht: Amtsgericht München, HRB 115215
Vorstand: Jürgen Rösch (Vorsitzender), Martina M. Schuster
Aufsichtsratsvorsitzende: Eva Zeising

-------------- next part --------------
A non-text attachment was scrubbed...
Name: robert_hoelzl.vcf
Type: text/x-vcard
Size: 569 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-dev/attachments/20080417/535c5441/attachment-0001.vcf>


More information about the Python-Dev mailing list