Commit 0b758b3b authored by Jeremy Hylton's avatar Jeremy Hylton

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.
parent f21f5965
......@@ -66,8 +66,9 @@ Req-started-unread-response _CS_REQ_STARTED <response_class>
Req-sent-unread-response _CS_REQ_SENT <response_class>
"""
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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment