From 6459c8d067890a64fc526204ab7004f9c8fcfe98 Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Thu, 11 Oct 2001 17:47:22 +0000 Subject: [PATCH] Fix for SF buf #458835 Try to be systematic about dealing with socket and ssl exceptions in FakeSocket.makefile(). The previous version of the code caught all ssl errors and treated them as EOF, even though most of the errors don't mean EOF. An SSL error can mean on of three things: 1. The SSL/TLS connection was closed. 2. The operation should be retried. 3. An error occurred. Also, if a socket error occurred and the error was EINTR, retry the call. Otherwise, it was a legitimate error and the caller should receive the exception. --- Lib/httplib.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Lib/httplib.py b/Lib/httplib.py index fa63787ef6..cb068564f8 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -66,8 +66,9 @@ Req-started-unread-response _CS_REQ_STARTED Req-sent-unread-response _CS_REQ_SENT """ -import socket +import errno import mimetools +import socket try: from cStringIO import StringIO @@ -604,8 +605,18 @@ class FakeSocket: while 1: try: buf = self.__ssl.read() - except socket.sslerror, msg: - break + except socket.sslerror, err: + if (err[0] == socket.SSL_ERROR_WANT_READ + or err[0] == socket.SSL_ERROR_WANT_WRITE + or 0): + continue + if err[0] == socket.SSL_ERROR_ZERO_RETURN: + break + raise + except socket.error, err: + if err[0] = errno.EINTR: + continue + raise if buf == '': break msgbuf.append(buf) -- 2.50.1