]> granicus.if.org Git - apache/commitdiff
Fix handling of non-blocking reads in mod_ssl (triggered by recent
authorJoe Orton <jorton@apache.org>
Sun, 14 Nov 2004 17:20:01 +0000 (17:20 +0000)
committerJoe Orton <jorton@apache.org>
Sun, 14 Nov 2004 17:20:01 +0000 (17:20 +0000)
change to mod_proxy_http):

* modules/ssl/ssl_engine_io.c (bio_filter_in_read): Return an error if
the read would block so that the SSL_read() caller checks for
SSL_ERROR_WANT_READ, rather than 0, which is treated like EOF.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@105768 13f79535-47bb-0310-9956-ffa450edef68

modules/ssl/ssl_engine_io.c

index 1af89ed5503ed89f48116911a4ef54e7b2c5acef..fd5be72f0fd170e82ec0e0aee504b7f35ad850f6 100644 (file)
@@ -488,12 +488,14 @@ static int bio_filter_in_read(BIO *bio, char *in, int inlen)
                                    AP_MODE_READBYTES, block, 
                                    inl);
 
-        /* Not a problem, there was simply no data ready yet.
-         */
+        /* If the read returns EAGAIN or success with an empty
+         * brigade, return an error after setting the retry flag;
+         * SSL_read() will then return -1, and SSL_get_error() will
+         * indicate SSL_ERROR_WANT_READ. */
         if (APR_STATUS_IS_EAGAIN(inctx->rc) || APR_STATUS_IS_EINTR(inctx->rc)
                || (inctx->rc == APR_SUCCESS && APR_BRIGADE_EMPTY(inctx->bb))) {
             BIO_set_retry_read(bio);
-            return 0;
+            return -1;
         }
 
         if (inctx->rc != APR_SUCCESS) {