diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2010-07-24 02:24:55 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2010-07-24 02:24:55 (GMT) |
commit | 756f547b9a4b93c4eab1bb05dbf41c33e5924554 (patch) | |
tree | d708b3e204c6ea2c1d66cd61736cea2ea451f972 | |
parent | eccc5facd34609c029efce6fd2cd302f73e50566 (diff) | |
download | cpython-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.py | 5 | ||||
-rw-r--r-- | Lib/xmlrpc/client.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
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: @@ -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). |