On Jun 14, 3:10 pm, [EMAIL PROTECTED] wrote: > Hi, > > > 2. The Python implementation ofxmlrpcis not very robust. It just waits for > > the connection to close. A well-written client (like your Java client) > > would detect the presence of a Content-Length header and use that. > > I'm facing a similar ordeal here. I think the right thing to do would > be to adjust the xmlrpc library to parse the header and check for the > Content-Length. Right now, the socket seems to read 1024 bytes, so > naturally, when the connection closes, the socket throws an error, > because it thinks that more bytes are coming. Which sounds rather > weird to me, given the fact that in rare cases the reply will be a > multiple of 1024 bytes :-) > > -- Andy Georges
For now, these changes helped me out. It probably (read: certainly) needs some cleanup, and I'm probably not taking everything into account as I should: --- xmlrpclib.py 2007-06-14 15:42:36.000000000 +0200 +++ /sw/lib/python2.5/xmlrpclib.py 2006-11-29 02:46:38.000000000 +0100 @@ -1184,11 +1184,6 @@ errcode, errmsg, headers = h.getreply() - expected_payload_length = 1024 - if headers.has_key('content-length'): - expected_payload_length = int(headers['content-length']) - - if errcode != 200: raise ProtocolError( host + handler, @@ -1203,7 +1198,7 @@ except AttributeError: sock = None - return self._parse_response(h.getfile(), sock, expected_payload_length) + return self._parse_response(h.getfile(), sock) ## # Create parser. @@ -1323,23 +1318,21 @@ # could not be accessed). # @return Response tuple and target method. - def _parse_response(self, file, sock, size=1024): + def _parse_response(self, file, sock): # read response from input file/socket, and parse it p, u = self.getparser() while 1: if sock: - response = sock.recv(size) + response = sock.recv(1024) else: - response = file.read(size) + response = file.read(1024) if not response: break if self.verbose: print "body:", repr(response) p.feed(response) - if len(response) == size: - break file.close() p.close() -- Andy Georges -- http://mail.python.org/mailman/listinfo/python-list