Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 42dd01a

Browse files
committed
An ssl-wrapped socket now returns '' on EOF, just like a regular
socket -- as suggested by Clarence Gardner. Fix httplib to comply with the new ssl-socket interface.
1 parent 0072d5a commit 42dd01a

2 files changed

Lines changed: 11 additions & 10 deletions

File tree

Lib/httplib.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -575,13 +575,16 @@ def makefile(self, mode, bufsize=None):
575575
if mode != 'r' and mode != 'rb':
576576
raise UnimplementedFileMode()
577577

578-
msgbuf = ""
578+
msgbuf = []
579579
while 1:
580580
try:
581-
msgbuf = msgbuf + self.__ssl.read()
581+
buf = self.__ssl.read()
582582
except socket.sslerror, msg:
583583
break
584-
return StringIO(msgbuf)
584+
if buf == '':
585+
break
586+
msgbuf.append(buf)
587+
return StringIO("".join(msgbuf))
585588

586589
def send(self, stuff, flags = 0):
587590
return self.__ssl.write(stuff)
@@ -809,6 +812,7 @@ def test():
809812

810813
if hasattr(socket, 'ssl'):
811814
host = 'sourceforge.net'
815+
selector = '/projects/python'
812816
hs = HTTPS()
813817
hs.connect(host)
814818
hs.putrequest('GET', selector)

Modules/socketmodule.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2165,17 +2165,14 @@ static PyObject *SSL_SSLread(SSLObject *self, PyObject *args)
21652165
res = SSL_get_error(self->ssl, count);
21662166

21672167
switch (res) {
2168-
case 0: /* Good return value! */
2168+
case SSL_ERROR_NONE:
2169+
assert(count > 0);
21692170
break;
2170-
case 6:
2171-
PyErr_SetString(SSLErrorObject, "EOF");
2172-
Py_DECREF(buf);
2173-
return NULL;
2171+
case SSL_ERROR_ZERO_RETURN: /* normal EOF */
2172+
assert(count == 0);
21742173
break;
2175-
case 5:
21762174
default:
21772175
return PyErr_SetFromErrno(SSLErrorObject);
2178-
break;
21792176
}
21802177

21812178
fflush(stderr);

0 commit comments

Comments
 (0)