diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-02-01 23:35:20 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-02-01 23:35:20 (GMT) |
commit | 42dd01add5cc53dc5a5eab46b04b44c8ef6c969f (patch) | |
tree | 3df3f376a6246daf649d5cb078a145f29efe409f | |
parent | 0072d5aa33eb84cb17e63d4dee255e1d1262f52e (diff) | |
download | cpython-42dd01add5cc53dc5a5eab46b04b44c8ef6c969f.zip cpython-42dd01add5cc53dc5a5eab46b04b44c8ef6c969f.tar.gz cpython-42dd01add5cc53dc5a5eab46b04b44c8ef6c969f.tar.bz2 |
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.
-rw-r--r-- | Lib/httplib.py | 10 | ||||
-rw-r--r-- | Modules/socketmodule.c | 11 |
2 files changed, 11 insertions, 10 deletions
diff --git a/Lib/httplib.py b/Lib/httplib.py index 4750685..6c3b5e0 100644 --- a/Lib/httplib.py +++ b/Lib/httplib.py @@ -575,13 +575,16 @@ class FakeSocket: if mode != 'r' and mode != 'rb': raise UnimplementedFileMode() - msgbuf = "" + msgbuf = [] while 1: try: - msgbuf = msgbuf + self.__ssl.read() + buf = self.__ssl.read() except socket.sslerror, msg: break - return StringIO(msgbuf) + if buf == '': + break + msgbuf.append(buf) + return StringIO("".join(msgbuf)) def send(self, stuff, flags = 0): return self.__ssl.write(stuff) @@ -809,6 +812,7 @@ def test(): if hasattr(socket, 'ssl'): host = 'sourceforge.net' + selector = '/projects/python' hs = HTTPS() hs.connect(host) hs.putrequest('GET', selector) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index b3571a5..9b6300c 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2165,17 +2165,14 @@ static PyObject *SSL_SSLread(SSLObject *self, PyObject *args) res = SSL_get_error(self->ssl, count); switch (res) { - case 0: /* Good return value! */ + case SSL_ERROR_NONE: + assert(count > 0); break; - case 6: - PyErr_SetString(SSLErrorObject, "EOF"); - Py_DECREF(buf); - return NULL; + case SSL_ERROR_ZERO_RETURN: /* normal EOF */ + assert(count == 0); break; - case 5: default: return PyErr_SetFromErrno(SSLErrorObject); - break; } fflush(stderr); |