i haven't been able to reproduce this, but the patch below (also in 
cvs) may fix.  seeing that ssl_io_hook_read sets rc = 0 if SSL_read 
returns -1 and SSL_get_error is SSL_ERROR_WANT_READ.  ssl_io_input_read 
was *always* returning APR_SUCCESS if it got 0 bytes.  now it only does so 
if SSL_ERROR_WANT_READ was the reason, otherwise returns APR_EOF.

Index: modules/ssl/ssl_engine_io.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/ssl/ssl_engine_io.c,v
retrieving revision 1.72
diff -u -r1.72 ssl_engine_io.c
--- modules/ssl/ssl_engine_io.c 5 Apr 2002 07:31:44 -0000       1.72
+++ modules/ssl/ssl_engine_io.c 7 Apr 2002 06:25:36 -0000
@@ -485,7 +485,7 @@
 
     rc = SSL_read(ssl, buf, len);
 
-    if (rc < 0) {
+    if (rc <= 0) {
         int ssl_err = SSL_get_error(ssl, rc);
 
         if (ssl_err == SSL_ERROR_WANT_READ) {
@@ -673,6 +673,10 @@
         if (ctx->inbio.mode == AP_MODE_SPECULATIVE) {
             char_buffer_write(&ctx->cbuf, buf, rc);
         }
+    }
+    else if ((rc == 0) && (errno != EINTR)) {
+        /* something other than SSL_ERROR_WANT_READ */
+        return APR_EOF;
     }
     else if ((rc == -1) && (ctx->inbio.rc == APR_SUCCESS)) {
         /*


Reply via email to