From 8b0d84e3d56f185e70b2f862d8f5bc33d1da92b3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 24 Jul 2010 02:51:49 +0000 Subject: [PATCH] Backport of 83120 (#9032) XML-RPC client: Transport.request() retries on EPIPE error The EPIPE error occurs when the server closes the socket and the client sends a "big" XML-RPC request (I don't know exactly the size threshold). request() just have to ignore the error because single_request() closes the socket on error, and so the next call to single_request() will open a new socket. Remove also a comment in the HTTP client because it's now wrong: see r70643 and issue #5542. --- Lib/xmlrpclib.py | 2 +- Misc/NEWS | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py index c7971cc4cf..b6aed62e3b 100644 --- a/Lib/xmlrpclib.py +++ b/Lib/xmlrpclib.py @@ -1263,7 +1263,7 @@ class Transport: try: return self.single_request(host, handler, request_body, verbose) except socket.error, e: - if i or e.errno not in (errno.ECONNRESET, errno.ECONNABORTED): + if i or e.errno not in (errno.ECONNRESET, errno.ECONNABORTED, errno.EPIPE): raise except httplib.BadStatusLine: #close after we sent request if i: diff --git a/Misc/NEWS b/Misc/NEWS index 22aa5b88df..915913743e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -18,6 +18,10 @@ Core and Builtins Library ------- +- Issue #9032: XML-RPC client retries the request on EPIPE error. The EPIPE + error occurs when the server closes the socket and the client sends a big + XML-RPC request. + - Issue #5542: Remove special logic that closes HTTPConnection socket on EPIPE. - Issue #4629: getopt raises an error if an argument ends with = whereas getopt -- 2.50.1