mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
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.
This commit is contained in:
parent
e2adc6c205
commit
6459c8d067
1 changed files with 14 additions and 3 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue