]> granicus.if.org Git - python/commitdiff
An ssl-wrapped socket now returns '' on EOF, just like a regular
authorJeremy Hylton <jeremy@alum.mit.edu>
Thu, 1 Feb 2001 23:35:20 +0000 (23:35 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Thu, 1 Feb 2001 23:35:20 +0000 (23:35 +0000)
socket -- as suggested by Clarence Gardner.

Fix httplib to comply with the new ssl-socket interface.

Lib/httplib.py
Modules/socketmodule.c

index 4750685198650bc1a7b1a3aefa9e56270ef8160c..6c3b5e0402991ce630f16e4265e1a3985e6c02d0 100644 (file)
@@ -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)
index b3571a5ef782d7e1571bb5e1f2c242f5c447eac8..9b6300c090c0b3b07e0b65ac87a855bf4735fa95 100644 (file)
@@ -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);