summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2010-07-24 02:24:55 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2010-07-24 02:24:55 (GMT)
commit756f547b9a4b93c4eab1bb05dbf41c33e5924554 (patch)
treed708b3e204c6ea2c1d66cd61736cea2ea451f972
parenteccc5facd34609c029efce6fd2cd302f73e50566 (diff)
downloadcpython-756f547b9a4b93c4eab1bb05dbf41c33e5924554.zip
cpython-756f547b9a4b93c4eab1bb05dbf41c33e5924554.tar.gz
cpython-756f547b9a4b93c4eab1bb05dbf41c33e5924554.tar.bz2
#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.
-rw-r--r--Lib/http/client.py5
-rw-r--r--Lib/xmlrpc/client.py2
-rw-r--r--Misc/NEWS4
3 files changed, 5 insertions, 6 deletions
diff --git a/Lib/http/client.py b/Lib/http/client.py
index c83c53b..e4a9c07 100644
--- a/Lib/http/client.py
+++ b/Lib/http/client.py
@@ -734,11 +734,6 @@ class HTTPConnection:
else:
raise NotConnected()
- # send the data to the server. if we get a broken pipe, then close
- # the socket. we want to reconnect when somebody tries to send again.
- #
- # NOTE: we DO propagate the error, though, because we cannot simply
- # ignore the error... the caller will know if they can retry.
if self.debuglevel > 0:
print("send:", repr(str))
blocksize = 8192
diff --git a/Lib/xmlrpc/client.py b/Lib/xmlrpc/client.py
index a72908c..d9c43c2 100644
--- a/Lib/xmlrpc/client.py
+++ b/Lib/xmlrpc/client.py
@@ -1135,7 +1135,7 @@ class Transport:
try:
return self.single_request(host, handler, request_body, verbose)
except socket.error as 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 http.client.BadStatusLine: #close after we sent request
if i:
diff --git a/Misc/NEWS b/Misc/NEWS
index 295a9a7..ee46e94 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -473,6 +473,10 @@ C-API
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 #4629: getopt raises an error if an argument ends with = whereas getopt
doesn't except a value (eg. --help= is rejected if getopt uses ['help='] long
options).