This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2010年06月18日 22:32 by vstinner, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| xmlrpc_request_epipe.patch | vstinner, 2010年06月18日 22:32 | |||
| Messages (3) | |||
|---|---|---|---|
| msg108146 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年06月18日 22:32 | |
Since Python 2.7 / 3.2, httplib supports HTTP(S)/1.1 (keep-alive). This version of HTTP is much faster because the connection is kept between two requests. I'm using it with XML-RPC + SSL (M2Crypto). It works nice. My problem is when the server closes the connection (eg. the server restarts). If I send a small (XML-RPC) request, sending the request works (I don't understand why, maybe because of a buffer somewhere), but getting the response raises a BadStatusLine because the response is empty (0 byte). If I send a big (XML-RPC) request, sending the request fails with a SSLError(EPIPE, '...') and Transport.request() doesn't retry with a new connection. I patched my copy of M2Crypto to ensure that SSLError inherits from socket.error, but it's not enough: Transport.request() only catchs errno.ECONNRESET and errno.ECONNABORTED socket errors. Attached patch catchs also errno.EPIPE. This error is received on sending to the socket whereas the server closed the socket. |
|||
| msg108147 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年06月18日 22:54 | |
See also r70643 (from issue #5542): "Remove special logic that closes HTTPConnection socket on EPIPE. If the socket is closed, the client has no chance to read the response from the server. EPIPE means that it isn't possible to write more data from the socket, but not that it is impossible to read." This commit didn't updated the following comment. I think that it should be fixed (maybe removed?) because the socket is no more closed on broken pipe error. # 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. |
|||
| msg111422 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2010年07月24日 02:52 | |
I fixed the bug in 2.7 (r83123) and 3.2 (r83120). |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:02 | admin | set | github: 53278 |
| 2010年07月24日 02:52:23 | vstinner | set | status: open -> closed resolution: fixed messages: + msg111422 |
| 2010年06月18日 22:54:08 | vstinner | set | messages: + msg108147 |
| 2010年06月18日 22:32:25 | vstinner | create | |