diff options
author | Graham Leggett <minfrin@apache.org> | 2022-02-09 19:23:23 +0100 |
---|---|---|
committer | Graham Leggett <minfrin@apache.org> | 2022-02-09 19:23:23 +0100 |
commit | 600072cf7c3722259b072e89f2ed07defd4b7063 (patch) | |
tree | e0de964cbaf44bb1c070ca9d48645717387ed3b8 /support | |
parent | Reserve two APLOGNOs for PR #294 [skip ci] (diff) | |
download | apache2-600072cf7c3722259b072e89f2ed07defd4b7063.tar.xz apache2-600072cf7c3722259b072e89f2ed07defd4b7063.zip |
ab: Fix the detection for when the server performed a legitimate
connection close as per RFC7230 6.3.1. We must check whedther the
connection was previously kept alive, and not whether the current
closed request is keepalive.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1897912 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'support')
-rw-r--r-- | support/ab.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/support/ab.c b/support/ab.c index e9580ab587..bd44ead6ba 100644 --- a/support/ab.c +++ b/support/ab.c @@ -273,6 +273,7 @@ struct connection { beginread, /* First byte of input */ done; /* Connection closed */ + apr_uint64_t keptalive; /* subsequent keepalive requests */ int socknum; #ifdef USE_SSL SSL *ssl; @@ -738,6 +739,7 @@ static void ssl_proceed_handshake(struct connection *c) while (do_next) { int ret, ecode; + apr_status_t status; ret = SSL_do_handshake(c->ssl); ecode = SSL_get_error(c->ssl, ret); @@ -825,7 +827,9 @@ static void ssl_proceed_handshake(struct connection *c) case SSL_ERROR_SSL: case SSL_ERROR_SYSCALL: /* Unexpected result */ - BIO_printf(bio_err, "SSL handshake failed (%d).\n", ecode); + status = apr_get_netos_error(); + BIO_printf(bio_err, "SSL handshake failed (%d): %s\n", ecode, + apr_psprintf(c->ctx, "%pm", &status)); ERR_print_errors(bio_err); close_connection(c); do_next = 0; @@ -1406,6 +1410,7 @@ static void start_connect(struct connection * c) c->cbx = 0; c->gotheader = 0; c->rwrite = 0; + c->keptalive = 0; if (c->ctx) { apr_pool_clear(c->ctx); } @@ -1528,9 +1533,10 @@ static void start_connect(struct connection * c) static void close_connection(struct connection * c) { - if (c->read == 0 && c->keepalive) { + if (c->read == 0 && c->keptalive) { /* * server has legitimately shut down an idle keep alive request + * as per RFC7230 6.3.1. */ if (good) good--; /* connection never happened */ @@ -1851,6 +1857,8 @@ read_more: /* zero connect time with keep-alive */ c->start = c->connect = lasttime = apr_time_now(); + c->keptalive++; + write_request(c); } } |