From 73faf3469d4dcefb832794de825c6951cfdbb0bc Mon Sep 17 00:00:00 2001 From: Yann Ylavic Date: Tue, 10 Oct 2017 09:09:22 +0000 Subject: [PATCH] ab: Keep reading nonblocking to exhaust TCP or SSL buffers when previous read was incomplete (the SSL case can cause the next poll() to timeout since data are buffered already). PR 61301 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1811649 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 4 ++++ support/ab.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/CHANGES b/CHANGES index 2a174e98a1..e9d54adc6e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes with Apache 2.5.0 + *) ab: Keep reading nonblocking to exhaust TCP or SSL buffers when previous + read was incomplete (the SSL case can cause the next poll() to timeout + since data are buffered already). PR 61301 [Luca Toscano, Yann Ylavic] + *) mod_md: v0.9.9, fix for applying challenge type based on available ports. [Stefan Eissing] *) mod_proxy_uwsgi: New UWSGI mod_proxy (sub)module contributed by unbit.com. diff --git a/support/ab.c b/support/ab.c index 118e17b5c8..d8486ea769 100644 --- a/support/ab.c +++ b/support/ab.c @@ -1506,6 +1506,7 @@ static void read_connection(struct connection * c) int i; r = sizeof(buffer); +read_more: #ifdef USE_SSL if (c->ssl) { status = SSL_read(c->ssl, buffer, r); @@ -1712,6 +1713,10 @@ static void read_connection(struct connection * c) c->bread += r; totalbread += r; } + if (r == sizeof(buffer) && c->bread < c->length) { + /* read was full, try more immediately (nonblocking already) */ + goto read_more; + } if (c->keepalive && (c->bread >= c->length)) { /* finished a keep-alive connection */ -- 2.40.0