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)) {
/*