From: Jean-Jacques Clar Date: Tue, 18 May 2004 19:21:35 +0000 (+0000) Subject: replaced tabs with spaces and aligned indentation within brackets X-Git-Tag: pre_ajp_proxy~252 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8409d24f0d886628c72dabc8d7175be0f0c2b0db;p=apache replaced tabs with spaces and aligned indentation within brackets git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@103697 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/support/ab.c b/support/ab.c index 2221b46012..54785a5518 100644 --- a/support/ab.c +++ b/support/ab.c @@ -67,7 +67,7 @@ ** Contributed by Aaron Bannert, April 24, 2002 ** ** Version 2.0.36-2 - ** Internalized the version string - this string is part + ** Internalized the version string - this string is part ** of the Agent: header and the result output. ** ** Version 2.0.37-dev @@ -208,21 +208,21 @@ struct connection { apr_pool_t *ctx; apr_socket_t *aprsock; int state; - apr_size_t read; /* amount of bytes read */ - apr_size_t bread; /* amount of body read */ - apr_size_t rwrite, rwrote; /* keep pointers in what we write - across - * EAGAINs */ - apr_size_t length; /* Content-Length value used for keep-alive */ - char cbuff[CBUFFSIZE]; /* a buffer to store server response header */ - int cbx; /* offset in cbuffer */ - int keepalive; /* non-zero if a keep-alive request */ - int gotheader; /* non-zero if we have the entire header in - * cbuff */ - apr_time_t start, /* Start of connection */ - connect, /* Connected, start writing */ - endwrite, /* Request written */ - beginread, /* First byte of input */ - done; /* Connection closed */ + apr_size_t read; /* amount of bytes read */ + apr_size_t bread; /* amount of body read */ + apr_size_t rwrite, rwrote; /* keep pointers in what we write - across + * EAGAINs */ + apr_size_t length; /* Content-Length value used for keep-alive */ + char cbuff[CBUFFSIZE]; /* a buffer to store server response header */ + int cbx; /* offset in cbuffer */ + int keepalive; /* non-zero if a keep-alive request */ + int gotheader; /* non-zero if we have the entire header in + * cbuff */ + apr_time_t start, /* Start of connection */ + connect, /* Connected, start writing */ + endwrite, /* Request written */ + beginread, /* First byte of input */ + done; /* Connection closed */ int socknum; #ifdef USE_SSL @@ -249,55 +249,55 @@ struct data { /* --------------------- GLOBALS ---------------------------- */ -int verbosity = 0; /* no verbosity by default */ -int posting = 0; /* GET by default */ -int requests = 1; /* Number of requests to make */ -int heartbeatres = 100; /* How often do we say we're alive */ -int concurrency = 1; /* Number of multiple requests to make */ -int percentile = 1; /* Show percentile served */ -int confidence = 1; /* Show confidence estimator and warnings */ -int tlimit = 0; /* time limit in secs */ -int keepalive = 0; /* try and do keepalive connections */ -char servername[1024]; /* name that server reports */ -char *hostname; /* host name from URL */ -char *host_field; /* value of "Host:" header field */ -char *path; /* path name */ -char postfile[1024]; /* name of file containing post data */ -char *postdata; /* *buffer containing data from postfile */ -apr_size_t postlen = 0; /* length of data to be POSTed */ -char content_type[1024]; /* content type to put in POST header */ -char *cookie, /* optional cookie line */ - *auth, /* optional (basic/uuencoded) auhentication */ - *hdrs; /* optional arbitrary headers */ -apr_port_t port; /* port number */ -char proxyhost[1024]; /* proxy host name */ -int proxyport = 0; /* proxy port */ +int verbosity = 0; /* no verbosity by default */ +int posting = 0; /* GET by default */ +int requests = 1; /* Number of requests to make */ +int heartbeatres = 100; /* How often do we say we're alive */ +int concurrency = 1; /* Number of multiple requests to make */ +int percentile = 1; /* Show percentile served */ +int confidence = 1; /* Show confidence estimator and warnings */ +int tlimit = 0; /* time limit in secs */ +int keepalive = 0; /* try and do keepalive connections */ +char servername[1024]; /* name that server reports */ +char *hostname; /* host name from URL */ +char *host_field; /* value of "Host:" header field */ +char *path; /* path name */ +char postfile[1024]; /* name of file containing post data */ +char *postdata; /* *buffer containing data from postfile */ +apr_size_t postlen = 0; /* length of data to be POSTed */ +char content_type[1024];/* content type to put in POST header */ +char *cookie, /* optional cookie line */ + *auth, /* optional (basic/uuencoded) auhentication */ + *hdrs; /* optional arbitrary headers */ +apr_port_t port; /* port number */ +char proxyhost[1024]; /* proxy host name */ +int proxyport = 0; /* proxy port */ char *connecthost; apr_port_t connectport; -char *gnuplot; /* GNUplot file */ -char *csvperc; /* CSV Percentile file */ +char *gnuplot; /* GNUplot file */ +char *csvperc; /* CSV Percentile file */ char url[1024]; char * fullurl, * colonhost; int isproxy = 0; -apr_interval_time_t aprtimeout = apr_time_from_sec(30); /* timeout value */ +apr_interval_time_t aprtimeout = apr_time_from_sec(30); /* timeout value */ /* * XXX - this is now a per read/write transact type of value */ -int use_html = 0; /* use html in the report */ +int use_html = 0; /* use html in the report */ const char *tablestring; const char *trstring; const char *tdstring; -apr_size_t doclen = 0; /* the length the document should be */ -long started = 0; /* number of requests started, so no excess */ -long totalread = 0; /* total number of bytes read */ -long totalbread = 0; /* totoal amount of entity body read */ -long totalposted = 0; /* total number of bytes posted, inc. headers */ -long done = 0; /* number of requests we have done */ -long doneka = 0; /* number of keep alive connections done */ -long good = 0, bad = 0; /* number of good and bad requests */ -long epipe = 0; /* number of broken pipe writes */ +apr_size_t doclen = 0; /* the length the document should be */ +long started = 0; /* number of requests started, so no excess */ +long totalread = 0; /* total number of bytes read */ +long totalbread = 0; /* totoal amount of entity body read */ +long totalposted = 0; /* total number of bytes posted, inc. headers */ +long done = 0; /* number of requests we have done */ +long doneka = 0; /* number of keep alive connections done */ +long good = 0, bad = 0; /* number of good and bad requests */ +long epipe = 0; /* number of broken pipe writes */ #ifdef USE_SSL int ssl = 0; @@ -323,8 +323,8 @@ char buffer[8192]; /* interesting percentiles */ int percs[] = {50, 66, 75, 80, 90, 95, 98, 99, 100}; -struct connection *con; /* connection array */ -struct data *stats; /* date for each request */ +struct connection *con; /* connection array */ +struct data *stats; /* date for each request */ apr_pool_t *cntxt; apr_pollset_t *readbits; @@ -355,8 +355,8 @@ static void apr_err(char *s, apr_status_t rv) char buf[120]; fprintf(stderr, - "%s: %s (%d)\n", - s, apr_strerror(rv, buf, sizeof buf), rv); + "%s: %s (%d)\n", + s, apr_strerror(rv, buf, sizeof buf), rv); if (done) printf("Total of %ld requests completed\n" , done); exit(rv); @@ -512,49 +512,49 @@ static void ssl_rand_seed(void) static int ssl_print_connection_info(BIO *bio, SSL *ssl) { - SSL_CIPHER *c; - int alg_bits,bits; - - c=SSL_get_current_cipher(ssl); - BIO_printf(bio,"Cipher Suite Protocol :%s\n", SSL_CIPHER_get_version(c)); - BIO_printf(bio,"Cipher Suite Name :%s\n",SSL_CIPHER_get_name(c)); - - bits=SSL_CIPHER_get_bits(c,&alg_bits); - BIO_printf(bio,"Cipher Suite Cipher Bits:%d (%d)\n",bits,alg_bits); - - return(1); + SSL_CIPHER *c; + int alg_bits,bits; + + c=SSL_get_current_cipher(ssl); + BIO_printf(bio,"Cipher Suite Protocol :%s\n", SSL_CIPHER_get_version(c)); + BIO_printf(bio,"Cipher Suite Name :%s\n",SSL_CIPHER_get_name(c)); + + bits=SSL_CIPHER_get_bits(c,&alg_bits); + BIO_printf(bio,"Cipher Suite Cipher Bits:%d (%d)\n",bits,alg_bits); + + return(1); } static int ssl_print_cert_info(BIO *bio, X509 *x509cert) { - X509_NAME *dn; - char buf[64]; + X509_NAME *dn; + char buf[64]; - BIO_printf(bio,"Certificate version: %d\n",X509_get_version(x509cert)+1); + BIO_printf(bio,"Certificate version: %d\n",X509_get_version(x509cert)+1); - BIO_printf(bio,"Valid from: "); - ASN1_UTCTIME_print(bio, X509_get_notBefore(x509cert)); - BIO_printf(bio,"\n"); + BIO_printf(bio,"Valid from: "); + ASN1_UTCTIME_print(bio, X509_get_notBefore(x509cert)); + BIO_printf(bio,"\n"); - BIO_printf(bio,"Valid to : "); - ASN1_UTCTIME_print(bio, X509_get_notAfter(x509cert)); - BIO_printf(bio,"\n"); + BIO_printf(bio,"Valid to : "); + ASN1_UTCTIME_print(bio, X509_get_notAfter(x509cert)); + BIO_printf(bio,"\n"); - BIO_printf(bio,"Public key is %d bits\n", - EVP_PKEY_bits(X509_get_pubkey(x509cert))); + BIO_printf(bio,"Public key is %d bits\n", + EVP_PKEY_bits(X509_get_pubkey(x509cert))); - dn=X509_get_issuer_name(x509cert); - X509_NAME_oneline(dn, buf, BUFSIZ); - BIO_printf(bio,"The issuer name is %s\n", buf); + dn=X509_get_issuer_name(x509cert); + X509_NAME_oneline(dn, buf, BUFSIZ); + BIO_printf(bio,"The issuer name is %s\n", buf); - dn=X509_get_subject_name(x509cert); - X509_NAME_oneline(dn, buf, BUFSIZ); - BIO_printf(bio,"The subject name is %s\n", buf); + dn=X509_get_subject_name(x509cert); + X509_NAME_oneline(dn, buf, BUFSIZ); + BIO_printf(bio,"The subject name is %s\n", buf); - /* dump the extension list too */ - BIO_printf(bio,"Extension Count: %d\n",X509_get_ext_count(x509cert)); + /* dump the extension list too */ + BIO_printf(bio,"Extension Count: %d\n",X509_get_ext_count(x509cert)); - return(1); + return(1); } static void ssl_start_connect(struct connection * c) @@ -691,30 +691,30 @@ static void ssl_start_connect(struct connection * c) static void write_request(struct connection * c) { do { - apr_time_t tnow = apr_time_now(); - apr_size_t l = c->rwrite; - apr_status_t e = APR_SUCCESS; /* prevent gcc warning */ - - /* - * First time round ? - */ - if (c->rwrite == 0) { + apr_time_t tnow = apr_time_now(); + apr_size_t l = c->rwrite; + apr_status_t e = APR_SUCCESS; /* prevent gcc warning */ + + /* + * First time round ? + */ + if (c->rwrite == 0) { #ifdef USE_SSL if (ssl != 1) #endif - apr_socket_timeout_set(c->aprsock, 0); - c->connect = tnow; - c->rwrite = reqlen; - c->rwrote = 0; - if (posting) - c->rwrite += postlen; - } - else if (tnow > c->connect + aprtimeout) { - printf("Send request timed out!\n"); - close_connection(c); - return; - } - + apr_socket_timeout_set(c->aprsock, 0); + c->connect = tnow; + c->rwrite = reqlen; + c->rwrote = 0; + if (posting) + c->rwrite += postlen; + } + else if (tnow > c->connect + aprtimeout) { + printf("Send request timed out!\n"); + close_connection(c); + return; + } + #ifdef USE_SSL if (ssl == 1) { apr_size_t e_ssl; @@ -729,30 +729,30 @@ static void write_request(struct connection * c) } else #endif - e = apr_socket_send(c->aprsock, request + c->rwrote, &l); - - /* - * Bail early on the most common case - */ - if (l == c->rwrite) - break; + e = apr_socket_send(c->aprsock, request + c->rwrote, &l); + /* + * Bail early on the most common case + */ + if (l == c->rwrite) + break; + #ifdef USE_SSL if (ssl != 1) #endif - if (e != APR_SUCCESS) { - /* - * Let's hope this traps EWOULDBLOCK too ! - */ - if (!APR_STATUS_IS_EAGAIN(e)) { - epipe++; - printf("Send request failed!\n"); - close_connection(c); - } - return; - } - c->rwrote += l; - c->rwrite -= l; + if (e != APR_SUCCESS) { + /* + * Let's hope this traps EWOULDBLOCK too ! + */ + if (!APR_STATUS_IS_EAGAIN(e)) { + epipe++; + printf("Send request failed!\n"); + close_connection(c); + } + return; + } + c->rwrote += l; + c->rwrite -= l; } while (1); totalposted += c->rwrite; @@ -778,18 +778,18 @@ static void write_request(struct connection * c) static int compradre(struct data * a, struct data * b) { if ((a->ctime) < (b->ctime)) - return -1; + return -1; if ((a->ctime) > (b->ctime)) - return +1; + return +1; return 0; } static int comprando(struct data * a, struct data * b) { if ((a->time) < (b->time)) - return -1; + return -1; if ((a->time) > (b->time)) - return +1; + return +1; return 0; } @@ -798,18 +798,18 @@ static int compri(struct data * a, struct data * b) apr_interval_time_t p = a->time - a->ctime; apr_interval_time_t q = b->time - b->ctime; if (p < q) - return -1; + return -1; if (p > q) - return +1; + return +1; return 0; } static int compwait(struct data * a, struct data * b) { if ((a->waittime) < (b->waittime)) - return -1; + return -1; if ((a->waittime) > (b->waittime)) - return 1; + return 1; return 0; } @@ -838,40 +838,40 @@ static void output_results(void) printf("Complete requests: %ld\n", done); printf("Failed requests: %ld\n", bad); if (bad) - printf(" (Connect: %d, Length: %d, Exceptions: %d)\n", - err_conn, err_length, err_except); + printf(" (Connect: %d, Length: %d, Exceptions: %d)\n", + err_conn, err_length, err_except); printf("Write errors: %ld\n", epipe); if (err_response) - printf("Non-2xx responses: %d\n", err_response); + printf("Non-2xx responses: %d\n", err_response); if (keepalive) - printf("Keep-Alive requests: %ld\n", doneka); + printf("Keep-Alive requests: %ld\n", doneka); printf("Total transferred: %ld bytes\n", totalread); if (posting > 0) - printf("Total POSTed: %ld\n", totalposted); + printf("Total POSTed: %ld\n", totalposted); printf("HTML transferred: %ld bytes\n", totalbread); /* avoid divide by zero */ if (timetaken) { - printf("Requests per second: %.2f [#/sec] (mean)\n", + printf("Requests per second: %.2f [#/sec] (mean)\n", (float) (done / timetaken)); - printf("Time per request: %.3f [ms] (mean)\n", + printf("Time per request: %.3f [ms] (mean)\n", (float) (1000 * concurrency * timetaken / done)); - printf("Time per request: %.3f [ms] (mean, across all concurrent requests)\n", - (float) (1000 * timetaken / done)); - printf("Transfer rate: %.2f [Kbytes/sec] received\n", - (float) (totalread / 1024 / timetaken)); - if (posting > 0) { - printf(" %.2f kb/s sent\n", - (float) (totalposted / timetaken / 1024)); - printf(" %.2f kb/s total\n", - (float) ((totalread + totalposted) / timetaken / 1024)); - } + printf("Time per request: %.3f [ms] (mean, across all concurrent requests)\n", + (float) (1000 * timetaken / done)); + printf("Transfer rate: %.2f [Kbytes/sec] received\n", + (float) (totalread / 1024 / timetaken)); + if (posting > 0) { + printf(" %.2f kb/s sent\n", + (float) (totalposted / timetaken / 1024)); + printf(" %.2f kb/s total\n", + (float) ((totalread + totalposted) / timetaken / 1024)); + } } if (requests) { - /* work out connection times */ - long i; - apr_time_t totalcon = 0, total = 0, totald = 0, totalwait = 0; + /* work out connection times */ + long i; + apr_time_t totalcon = 0, total = 0, totald = 0, totalwait = 0; apr_time_t meancon, meantot, meand, meanwait; apr_interval_time_t mincon = AB_MAX, mintot = AB_MAX, mind = AB_MAX, minwait = AB_MAX; @@ -879,119 +879,119 @@ static void output_results(void) apr_interval_time_t mediancon = 0, mediantot = 0, mediand = 0, medianwait = 0; double sdtot = 0, sdcon = 0, sdd = 0, sdwait = 0; - for (i = 0; i < requests; i++) { - struct data s = stats[i]; - mincon = ap_min(mincon, s.ctime); - mintot = ap_min(mintot, s.time); - mind = ap_min(mind, s.time - s.ctime); - minwait = ap_min(minwait, s.waittime); - - maxcon = ap_max(maxcon, s.ctime); - maxtot = ap_max(maxtot, s.time); - maxd = ap_max(maxd, s.time - s.ctime); - maxwait = ap_max(maxwait, s.waittime); - - totalcon += s.ctime; - total += s.time; - totald += s.time - s.ctime; - totalwait += s.waittime; - } - meancon = totalcon / requests; - meantot = total / requests; - meand = totald / requests; - meanwait = totalwait / requests; - - /* calculating the sample variance: the sum of the squared deviations, divided by n-1 */ - for (i = 0; i < requests; i++) { - struct data s = stats[i]; - double a; - a = ((double)s.time - meantot); + for (i = 0; i < requests; i++) { + struct data s = stats[i]; + mincon = ap_min(mincon, s.ctime); + mintot = ap_min(mintot, s.time); + mind = ap_min(mind, s.time - s.ctime); + minwait = ap_min(minwait, s.waittime); + + maxcon = ap_max(maxcon, s.ctime); + maxtot = ap_max(maxtot, s.time); + maxd = ap_max(maxd, s.time - s.ctime); + maxwait = ap_max(maxwait, s.waittime); + + totalcon += s.ctime; + total += s.time; + totald += s.time - s.ctime; + totalwait += s.waittime; + } + meancon = totalcon / requests; + meantot = total / requests; + meand = totald / requests; + meanwait = totalwait / requests; + + /* calculating the sample variance: the sum of the squared deviations, divided by n-1 */ + for (i = 0; i < requests; i++) { + struct data s = stats[i]; + double a; + a = ((double)s.time - meantot); sdtot += a * a; - a = ((double)s.ctime - meancon); - sdcon += a * a; - a = ((double)s.time - (double)s.ctime - meand); - sdd += a * a; - a = ((double)s.waittime - meanwait); - sdwait += a * a; - } - - sdtot = (requests > 1) ? sqrt(sdtot / (requests - 1)) : 0; - sdcon = (requests > 1) ? sqrt(sdcon / (requests - 1)) : 0; - sdd = (requests > 1) ? sqrt(sdd / (requests - 1)) : 0; - sdwait = (requests > 1) ? sqrt(sdwait / (requests - 1)) : 0; - - if (gnuplot) { - FILE *out = fopen(gnuplot, "w"); - long i; - apr_time_t sttime; - char tmstring[1024];/* XXXX */ - if (!out) { - perror("Cannot open gnuplot output file"); - exit(1); - } - fprintf(out, "starttime\tseconds\tctime\tdtime\tttime\twait\n"); - for (i = 0; i < requests; i++) { + a = ((double)s.ctime - meancon); + sdcon += a * a; + a = ((double)s.time - (double)s.ctime - meand); + sdd += a * a; + a = ((double)s.waittime - meanwait); + sdwait += a * a; + } + + sdtot = (requests > 1) ? sqrt(sdtot / (requests - 1)) : 0; + sdcon = (requests > 1) ? sqrt(sdcon / (requests - 1)) : 0; + sdd = (requests > 1) ? sqrt(sdd / (requests - 1)) : 0; + sdwait = (requests > 1) ? sqrt(sdwait / (requests - 1)) : 0; + + if (gnuplot) { + FILE *out = fopen(gnuplot, "w"); + long i; + apr_time_t sttime; + char tmstring[1024];/* XXXX */ + if (!out) { + perror("Cannot open gnuplot output file"); + exit(1); + } + fprintf(out, "starttime\tseconds\tctime\tdtime\tttime\twait\n"); + for (i = 0; i < requests; i++) { apr_time_t diff = stats[i].time - stats[i].ctime; - sttime = stats[i].starttime; - (void) apr_ctime(tmstring, sttime); - fprintf(out, "%s\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\n", - tmstring, - sttime, - stats[i].ctime, - diff, - stats[i].time, - stats[i].waittime); - } - fclose(out); - } - /* - * XXX: what is better; this hideous cast of the compradre function; or - * the four warnings during compile ? dirkx just does not know and - * hates both/ - */ - qsort(stats, requests, sizeof(struct data), - (int (*) (const void *, const void *)) compradre); - if ((requests > 1) && (requests % 2)) - mediancon = (stats[requests / 2].ctime + stats[requests / 2 + 1].ctime) / 2; - else - mediancon = stats[requests / 2].ctime; - - qsort(stats, requests, sizeof(struct data), - (int (*) (const void *, const void *)) compri); - if ((requests > 1) && (requests % 2)) - mediand = (stats[requests / 2].time + stats[requests / 2 + 1].time \ - -stats[requests / 2].ctime - stats[requests / 2 + 1].ctime) / 2; - else - mediand = stats[requests / 2].time - stats[requests / 2].ctime; - - qsort(stats, requests, sizeof(struct data), - (int (*) (const void *, const void *)) compwait); - if ((requests > 1) && (requests % 2)) - medianwait = (stats[requests / 2].waittime + stats[requests / 2 + 1].waittime) / 2; - else - medianwait = stats[requests / 2].waittime; - - qsort(stats, requests, sizeof(struct data), - (int (*) (const void *, const void *)) comprando); - if ((requests > 1) && (requests % 2)) - mediantot = (stats[requests / 2].time + stats[requests / 2 + 1].time) / 2; - else - mediantot = stats[requests / 2].time; - - printf("\nConnection Times (ms)\n"); - - if (confidence) { + sttime = stats[i].starttime; + (void) apr_ctime(tmstring, sttime); + fprintf(out, "%s\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\t%" APR_TIME_T_FMT "\n", + tmstring, + sttime, + stats[i].ctime, + diff, + stats[i].time, + stats[i].waittime); + } + fclose(out); + } + /* + * XXX: what is better; this hideous cast of the compradre function; or + * the four warnings during compile ? dirkx just does not know and + * hates both/ + */ + qsort(stats, requests, sizeof(struct data), + (int (*) (const void *, const void *)) compradre); + if ((requests > 1) && (requests % 2)) + mediancon = (stats[requests / 2].ctime + stats[requests / 2 + 1].ctime) / 2; + else + mediancon = stats[requests / 2].ctime; + + qsort(stats, requests, sizeof(struct data), + (int (*) (const void *, const void *)) compri); + if ((requests > 1) && (requests % 2)) + mediand = (stats[requests / 2].time + stats[requests / 2 + 1].time \ + -stats[requests / 2].ctime - stats[requests / 2 + 1].ctime) / 2; + else + mediand = stats[requests / 2].time - stats[requests / 2].ctime; + + qsort(stats, requests, sizeof(struct data), + (int (*) (const void *, const void *)) compwait); + if ((requests > 1) && (requests % 2)) + medianwait = (stats[requests / 2].waittime + stats[requests / 2 + 1].waittime) / 2; + else + medianwait = stats[requests / 2].waittime; + + qsort(stats, requests, sizeof(struct data), + (int (*) (const void *, const void *)) comprando); + if ((requests > 1) && (requests % 2)) + mediantot = (stats[requests / 2].time + stats[requests / 2 + 1].time) / 2; + else + mediantot = stats[requests / 2].time; + + printf("\nConnection Times (ms)\n"); + + if (confidence) { #define CONF_FMT_STRING "%5" APR_TIME_T_FMT " %4d %5.1f %6" APR_TIME_T_FMT " %7" APR_TIME_T_FMT "\n" - printf(" min mean[+/-sd] median max\n"); - printf("Connect: " CONF_FMT_STRING, - mincon, (int) (meancon + 0.5), sdcon, mediancon, maxcon); - printf("Processing: " CONF_FMT_STRING, - mind, (int) (meand + 0.5), sdd, mediand, maxd); - printf("Waiting: " CONF_FMT_STRING, - minwait, (int) (meanwait + 0.5), sdwait, medianwait, maxwait); - printf("Total: " CONF_FMT_STRING, - mintot, (int) (meantot + 0.5), sdtot, mediantot, maxtot); + printf(" min mean[+/-sd] median max\n"); + printf("Connect: " CONF_FMT_STRING, + mincon, (int) (meancon + 0.5), sdcon, mediancon, maxcon); + printf("Processing: " CONF_FMT_STRING, + mind, (int) (meand + 0.5), sdd, mediand, maxd); + printf("Waiting: " CONF_FMT_STRING, + minwait, (int) (meanwait + 0.5), sdwait, medianwait, maxwait); + printf("Total: " CONF_FMT_STRING, + mintot, (int) (meantot + 0.5), sdtot, mediantot, maxtot); #undef CONF_FMT_STRING #define SANE(what,mean,median,sd) \ @@ -1005,56 +1005,57 @@ static void output_results(void) printf("WARNING: The median and mean for " what " are not within a normal deviation\n" \ " These results are probably not that reliable.\n"); \ } - SANE("the initial connection time", meancon, mediancon, sdcon); - SANE("the processing time", meand, mediand, sdd); - SANE("the waiting time", meanwait, medianwait, sdwait); - SANE("the total time", meantot, mediantot, sdtot); - } - else { - printf(" min avg max\n"); + SANE("the initial connection time", meancon, mediancon, sdcon); + SANE("the processing time", meand, mediand, sdd); + SANE("the waiting time", meanwait, medianwait, sdwait); + SANE("the total time", meantot, mediantot, sdtot); + } + else { + printf(" min avg max\n"); #define CONF_FMT_STRING "%5" APR_TIME_T_FMT " %5" APR_TIME_T_FMT "%5" APR_TIME_T_FMT "\n" - printf("Connect: " CONF_FMT_STRING, + printf("Connect: " CONF_FMT_STRING, mincon, meancon, maxcon); - printf("Processing: " CONF_FMT_STRING, + printf("Processing: " CONF_FMT_STRING, mintot - mincon, meantot - meancon, maxtot - maxcon); - printf("Total: " CONF_FMT_STRING, + printf("Total: " CONF_FMT_STRING, mintot, meantot, maxtot); #undef CONF_FMT_STRING - } + } - /* Sorted on total connect times */ - if (percentile && (requests > 1)) { - printf("\nPercentage of the requests served within a certain time (ms)\n"); - for (i = 0; i < sizeof(percs) / sizeof(int); i++) - if (percs[i] <= 0) - printf(" 0%% <0> (never)\n"); + /* Sorted on total connect times */ + if (percentile && (requests > 1)) { + printf("\nPercentage of the requests served within a certain time (ms)\n"); + for (i = 0; i < sizeof(percs) / sizeof(int); i++) { + if (percs[i] <= 0) + printf(" 0%% <0> (never)\n"); else if (percs[i] >= 100) - printf(" 100%% %5" APR_TIME_T_FMT " (longest request)\n", + printf(" 100%% %5" APR_TIME_T_FMT " (longest request)\n", stats[requests - 1].time); else - printf(" %d%% %5" APR_TIME_T_FMT "\n", percs[i], + printf(" %d%% %5" APR_TIME_T_FMT "\n", percs[i], stats[(int) (requests * percs[i] / 100)].time); - } - if (csvperc) { - FILE *out = fopen(csvperc, "w"); - int i; - if (!out) { - perror("Cannot open CSV output file"); - exit(1); - } - fprintf(out, "" "Percentage served" "," "Time in ms" "\n"); - for (i = 0; i < 100; i++) { - apr_time_t t; - if (i == 0) - t = stats[0].time; - else if (i == 100) - t = stats[requests - 1].time; - else - t = stats[(int) (0.5 + requests * i / 100.0)].time; - fprintf(out, "%d,%e\n", i, (double)t); - } - fclose(out); + } + } + if (csvperc) { + FILE *out = fopen(csvperc, "w"); + int i; + if (!out) { + perror("Cannot open CSV output file"); + exit(1); + } + fprintf(out, "" "Percentage served" "," "Time in ms" "\n"); + for (i = 0; i < 100; i++) { + apr_time_t t; + if (i == 0) + t = stats[0].time; + else if (i == 100) + t = stats[requests - 1].time; + else + t = stats[(int) (0.5 + requests * i / 100.0)].time; + fprintf(out, "%d,%e\n", i, (double)t); + } + fclose(out); } } @@ -1073,113 +1074,114 @@ static void output_html_results(void) printf("\n\n\n", tablestring); printf("" - "\n", - trstring, tdstring, tdstring, servername); + "\n", + trstring, tdstring, tdstring, servername); printf("" - "\n", - trstring, tdstring, tdstring, hostname); + "\n", + trstring, tdstring, tdstring, hostname); printf("" - "\n", - trstring, tdstring, tdstring, port); + "\n", + trstring, tdstring, tdstring, port); printf("" - "\n", - trstring, tdstring, tdstring, path); + "\n", + trstring, tdstring, tdstring, path); printf("" - "\n", - trstring, tdstring, tdstring, doclen); + "\n", + trstring, tdstring, tdstring, doclen); printf("" - "\n", - trstring, tdstring, tdstring, concurrency); + "\n", + trstring, tdstring, tdstring, concurrency); printf("" - "\n", - trstring, tdstring, tdstring, apr_time_sec(timetaken), + "\n", + trstring, tdstring, tdstring, apr_time_sec(timetaken), (long)apr_time_usec(timetaken)); printf("" - "\n", - trstring, tdstring, tdstring, done); + "\n", + trstring, tdstring, tdstring, done); printf("" - "\n", - trstring, tdstring, tdstring, bad); + "\n", + trstring, tdstring, tdstring, bad); if (bad) - printf("\n", - trstring, tdstring, err_conn, err_length, err_except); + printf("\n", + trstring, tdstring, err_conn, err_length, err_except); if (err_response) - printf("" - "\n", - trstring, tdstring, tdstring, err_response); + printf("" + "\n", + trstring, tdstring, tdstring, err_response); if (keepalive) - printf("" - "\n", - trstring, tdstring, tdstring, doneka); + printf("" + "\n", + trstring, tdstring, tdstring, doneka); printf("" - "\n", - trstring, tdstring, tdstring, totalread); + "\n", + trstring, tdstring, tdstring, totalread); if (posting > 0) - printf("" - "\n", - trstring, tdstring, tdstring, totalposted); + printf("" + "\n", + trstring, tdstring, tdstring, totalposted); printf("" - "\n", - trstring, tdstring, tdstring, totalbread); + "\n", + trstring, tdstring, tdstring, totalbread); /* avoid divide by zero */ if (timetaken) { - printf("" - "\n", - trstring, tdstring, tdstring, 1000 * (float) (done) / timetaken); - printf("" - "\n", - trstring, tdstring, tdstring, (float) (totalread) / timetaken); - if (posting > 0) { - printf("" - "\n", - trstring, tdstring, tdstring, - (float) (totalposted) / timetaken); - printf("" - "\n", - trstring, tdstring, tdstring, - (float) (totalread + totalposted) / timetaken); - } - } { - /* work out connection times */ - long i; - apr_interval_time_t totalcon = 0, total = 0; - apr_interval_time_t mincon = AB_MAX, mintot = AB_MAX; - apr_interval_time_t maxcon = 0, maxtot = 0; - - for (i = 0; i < requests; i++) { - struct data s = stats[i]; - mincon = ap_min(mincon, s.ctime); - mintot = ap_min(mintot, s.time); - maxcon = ap_max(maxcon, s.ctime); - maxtot = ap_max(maxtot, s.time); - totalcon += s.ctime; - total += s.time; - } - - if (requests > 0) { /* avoid division by zero (if 0 requests) */ - printf("\n", - trstring, tdstring); - printf("\n", - trstring, tdstring, tdstring, tdstring, tdstring); - printf("" - "" - "" - "\n", - trstring, tdstring, tdstring, mincon, tdstring, totalcon / requests, tdstring, maxcon); - printf("" - "" - "" - "\n", - trstring, tdstring, tdstring, mintot - mincon, tdstring, - (total / requests) - (totalcon / requests), tdstring, maxtot - maxcon); - printf("" - "" - "" - "\n", - trstring, tdstring, tdstring, mintot, tdstring, total / requests, tdstring, maxtot); - } - printf("
Server Software:%s
%s
Server Hostname:%s
%s
Server Port:%hd
%hd
Document Path:%s
%s
Document Length:%" APR_SIZE_T_FMT " bytes
%" APR_SIZE_T_FMT " bytes
Concurrency Level:%d
%d
Time taken for tests:%" APR_INT64_T_FMT ".%03ld seconds
%" APR_INT64_T_FMT ".%03ld seconds
Complete requests:%ld
%ld
Failed requests:%ld
%ld
(Connect: %d, Length: %d, Exceptions: %d)
(Connect: %d, Length: %d, Exceptions: %d)
Non-2xx responses:%d
Non-2xx responses:%d
Keep-Alive requests:%ld
Keep-Alive requests:%ld
Total transferred:%ld bytes
%ld bytes
Total POSTed:%ld
Total POSTed:%ld
HTML transferred:%ld bytes
%ld bytes
Requests per second:%.2f
Transfer rate:%.2f kb/s received
 %.2f kb/s sent
 %.2f kb/s total
Connnection Times (ms)
  min avg max
Connect:%5" APR_TIME_T_FMT "%5" APR_TIME_T_FMT "%5" APR_TIME_T_FMT "
Processing:%5" APR_TIME_T_FMT "%5" APR_TIME_T_FMT "%5" APR_TIME_T_FMT "
Total:%5" APR_TIME_T_FMT "%5" APR_TIME_T_FMT "%5" APR_TIME_T_FMT "
\n"); + printf("Requests per second:" + "%.2f\n", + trstring, tdstring, tdstring, 1000 * (float) (done) / timetaken); + printf("Transfer rate:" + "%.2f kb/s received\n", + trstring, tdstring, tdstring, (float) (totalread) / timetaken); + if (posting > 0) { + printf(" " + "%.2f kb/s sent\n", + trstring, tdstring, tdstring, + (float) (totalposted) / timetaken); + printf(" " + "%.2f kb/s total\n", + trstring, tdstring, tdstring, + (float) (totalread + totalposted) / timetaken); + } + } + { + /* work out connection times */ + long i; + apr_interval_time_t totalcon = 0, total = 0; + apr_interval_time_t mincon = AB_MAX, mintot = AB_MAX; + apr_interval_time_t maxcon = 0, maxtot = 0; + + for (i = 0; i < requests; i++) { + struct data s = stats[i]; + mincon = ap_min(mincon, s.ctime); + mintot = ap_min(mintot, s.time); + maxcon = ap_max(maxcon, s.ctime); + maxtot = ap_max(maxtot, s.time); + totalcon += s.ctime; + total += s.time; + } + + if (requests > 0) { /* avoid division by zero (if 0 requests) */ + printf("Connnection Times (ms)\n", + trstring, tdstring); + printf("  min avg max\n", + trstring, tdstring, tdstring, tdstring, tdstring); + printf("Connect:" + "%5" APR_TIME_T_FMT "" + "%5" APR_TIME_T_FMT "" + "%5" APR_TIME_T_FMT "\n", + trstring, tdstring, tdstring, mincon, tdstring, totalcon / requests, tdstring, maxcon); + printf("Processing:" + "%5" APR_TIME_T_FMT "" + "%5" APR_TIME_T_FMT "" + "%5" APR_TIME_T_FMT "\n", + trstring, tdstring, tdstring, mintot - mincon, tdstring, + (total / requests) - (totalcon / requests), tdstring, maxtot - maxcon); + printf("Total:" + "%5" APR_TIME_T_FMT "" + "%5" APR_TIME_T_FMT "" + "%5" APR_TIME_T_FMT "\n", + trstring, tdstring, tdstring, mintot, tdstring, total / requests, tdstring, maxtot); + } + printf("\n"); } } @@ -1199,7 +1201,7 @@ static void start_connect(struct connection * c) #endif if (!(started < requests)) - return; + return; c->read = 0; c->bread = 0; @@ -1212,8 +1214,8 @@ static void start_connect(struct connection * c) apr_pool_create(&c->ctx, cntxt); if ((rv = apr_socket_create(&c->aprsock, destsa->family, - SOCK_STREAM, 0, c->ctx)) != APR_SUCCESS) { - apr_err("socket", rv); + SOCK_STREAM, 0, c->ctx)) != APR_SUCCESS) { + apr_err("socket", rv); } if ((rv = apr_socket_opt_set(c->aprsock, APR_SO_NONBLOCK, 1)) != APR_SUCCESS) { @@ -1221,33 +1223,33 @@ static void start_connect(struct connection * c) } c->start = apr_time_now(); if ((rv = apr_socket_connect(c->aprsock, destsa)) != APR_SUCCESS) { - if (APR_STATUS_IS_EINPROGRESS(rv)) { + if (APR_STATUS_IS_EINPROGRESS(rv)) { apr_pollfd_t new_pollfd; - c->state = STATE_CONNECTING; - c->rwrite = 0; + c->state = STATE_CONNECTING; + c->rwrite = 0; new_pollfd.desc_type = APR_POLL_SOCKET; new_pollfd.reqevents = APR_POLLOUT; new_pollfd.desc.s = c->aprsock; new_pollfd.client_data = c; - apr_pollset_add(readbits, &new_pollfd); - return; - } - else { + apr_pollset_add(readbits, &new_pollfd); + return; + } + else { apr_pollfd_t remove_pollfd; remove_pollfd.desc_type = APR_POLL_SOCKET; remove_pollfd.desc.s = c->aprsock; - apr_pollset_remove(readbits, &remove_pollfd); - apr_socket_close(c->aprsock); - err_conn++; - if (bad++ > 10) { - fprintf(stderr, - "\nTest aborted after 10 failures\n\n"); - apr_err("apr_socket_connect()", rv); - } - c->state = STATE_UNCONNECTED; - start_connect(c); - return; - } + apr_pollset_remove(readbits, &remove_pollfd); + apr_socket_close(c->aprsock); + err_conn++; + if (bad++ > 10) { + fprintf(stderr, + "\nTest aborted after 10 failures\n\n"); + apr_err("apr_socket_connect()", rv); + } + c->state = STATE_UNCONNECTED; + start_connect(c); + return; + } } /* connected first time */ @@ -1263,36 +1265,36 @@ static void start_connect(struct connection * c) static void close_connection(struct connection * c) { if (c->read == 0 && c->keepalive) { - /* - * server has legitimately shut down an idle keep alive request - */ - if (good) - good--; /* connection never happened */ + /* + * server has legitimately shut down an idle keep alive request + */ + if (good) + good--; /* connection never happened */ } else { - if (good == 1) { - /* first time here */ - doclen = c->bread; - } - else if (c->bread != doclen) { - bad++; - err_length++; - } - /* save out time */ - if (done < requests) { - struct data s; - if ((done) && heartbeatres && !(done % heartbeatres)) { - fprintf(stderr, "Completed %ld requests\n", done); - fflush(stderr); - } - c->done = apr_time_now(); - s.read = c->read; - s.starttime = c->start; - s.ctime = ap_max(0, (c->connect - c->start) / 1000); - s.time = ap_max(0, (c->done - c->start) / 1000); - s.waittime = ap_max(0, (c->beginread - c->endwrite) / 1000); - stats[done++] = s; - } + if (good == 1) { + /* first time here */ + doclen = c->bread; + } + else if (c->bread != doclen) { + bad++; + err_length++; + } + /* save out time */ + if (done < requests) { + struct data s; + if ((done) && heartbeatres && !(done % heartbeatres)) { + fprintf(stderr, "Completed %ld requests\n", done); + fflush(stderr); + } + c->done = apr_time_now(); + s.read = c->read; + s.starttime = c->start; + s.ctime = ap_max(0, (c->connect - c->start) / 1000); + s.time = ap_max(0, (c->done - c->start) / 1000); + s.waittime = ap_max(0, (c->beginread - c->endwrite) / 1000); + stats[done++] = s; + } } #ifdef USE_SSL @@ -1325,7 +1327,7 @@ static void read_connection(struct connection * c) apr_size_t r; apr_status_t status; char *part; - char respcode[4]; /* 3 digits and null */ + char respcode[4]; /* 3 digits and null */ r = sizeof(buffer); #ifdef USE_SSL @@ -1338,114 +1340,114 @@ static void read_connection(struct connection * c) close_connection(c); return; } - r = status; + r = status; } else { #endif - status = apr_socket_recv(c->aprsock, buffer, &r); - if (APR_STATUS_IS_EAGAIN(status)) - return; - else if (r == 0 && APR_STATUS_IS_EOF(status)) { - good++; - close_connection(c); - return; - } - /* catch legitimate fatal apr_socket_recv errors */ - else if (status != APR_SUCCESS) { - err_except++; /* XXX: is this the right error counter? */ - /* XXX: Should errors here be fatal, or should we allow a - * certain number of them before completely failing? -aaron */ - apr_err("apr_socket_recv", status); - } + status = apr_socket_recv(c->aprsock, buffer, &r); + if (APR_STATUS_IS_EAGAIN(status)) + return; + else if (r == 0 && APR_STATUS_IS_EOF(status)) { + good++; + close_connection(c); + return; + } + /* catch legitimate fatal apr_socket_recv errors */ + else if (status != APR_SUCCESS) { + err_except++; /* XXX: is this the right error counter? */ + /* XXX: Should errors here be fatal, or should we allow a + * certain number of them before completely failing? -aaron */ + apr_err("apr_socket_recv", status); + } #ifdef USE_SSL } #endif totalread += r; if (c->read == 0) { - c->beginread = apr_time_now(); + c->beginread = apr_time_now(); } c->read += r; if (!c->gotheader) { - char *s; - int l = 4; - apr_size_t space = CBUFFSIZE - c->cbx - 1; /* -1 allows for \0 term */ - int tocopy = (space < r) ? space : r; + char *s; + int l = 4; + apr_size_t space = CBUFFSIZE - c->cbx - 1; /* -1 allows for \0 term */ + int tocopy = (space < r) ? space : r; #ifdef NOT_ASCII - apr_size_t inbytes_left = space, outbytes_left = space; - - status = apr_xlate_conv_buffer(from_ascii, buffer, &inbytes_left, - c->cbuff + c->cbx, &outbytes_left); - if (status || inbytes_left || outbytes_left) { - fprintf(stderr, "only simple translation is supported (%d/%u/%u)\n", - status, inbytes_left, outbytes_left); - exit(1); - } + apr_size_t inbytes_left = space, outbytes_left = space; + + status = apr_xlate_conv_buffer(from_ascii, buffer, &inbytes_left, + c->cbuff + c->cbx, &outbytes_left); + if (status || inbytes_left || outbytes_left) { + fprintf(stderr, "only simple translation is supported (%d/%u/%u)\n", + status, inbytes_left, outbytes_left); + exit(1); + } #else - memcpy(c->cbuff + c->cbx, buffer, space); -#endif /* NOT_ASCII */ - c->cbx += tocopy; - space -= tocopy; - c->cbuff[c->cbx] = 0; /* terminate for benefit of strstr */ + memcpy(c->cbuff + c->cbx, buffer, space); +#endif /* NOT_ASCII */ + c->cbx += tocopy; + space -= tocopy; + c->cbuff[c->cbx] = 0; /* terminate for benefit of strstr */ if (verbosity >= 2) { - printf("LOG: header received:\n%s\n", c->cbuff); - } - s = strstr(c->cbuff, "\r\n\r\n"); - /* - * this next line is so that we talk to NCSA 1.5 which blatantly - * breaks the http specifaction - */ - if (!s) { - s = strstr(c->cbuff, "\n\n"); - l = 2; - } - - if (!s) { - /* read rest next time */ - if (space) { - return; - } - else { - /* header is in invalid or too big - close connection */ + printf("LOG: header received:\n%s\n", c->cbuff); + } + s = strstr(c->cbuff, "\r\n\r\n"); + /* + * this next line is so that we talk to NCSA 1.5 which blatantly + * breaks the http specifaction + */ + if (!s) { + s = strstr(c->cbuff, "\n\n"); + l = 2; + } + + if (!s) { + /* read rest next time */ + if (space) { + return; + } + else { + /* header is in invalid or too big - close connection */ apr_pollfd_t remove_pollfd; remove_pollfd.desc_type = APR_POLL_SOCKET; remove_pollfd.desc.s = c->aprsock; apr_pollset_remove(readbits, &remove_pollfd); - apr_socket_close(c->aprsock); - err_response++; - if (bad++ > 10) { - err("\nTest aborted after 10 failures\n\n"); - } - start_connect(c); - } - } - else { - /* have full header */ - if (!good) { - /* - * this is first time, extract some interesting info - */ - char *p, *q; - p = strstr(c->cbuff, "Server:"); - q = servername; - if (p) { - p += 8; - while (*p > 32) - *q++ = *p++; - } - *q = 0; - } - /* - * XXX: this parsing isn't even remotely HTTP compliant... but in - * the interest of speed it doesn't totally have to be, it just - * needs to be extended to handle whatever servers folks want to - * test against. -djg - */ - - /* check response code */ - part = strstr(c->cbuff, "HTTP"); /* really HTTP/1.x_ */ + apr_socket_close(c->aprsock); + err_response++; + if (bad++ > 10) { + err("\nTest aborted after 10 failures\n\n"); + } + start_connect(c); + } + } + else { + /* have full header */ + if (!good) { + /* + * this is first time, extract some interesting info + */ + char *p, *q; + p = strstr(c->cbuff, "Server:"); + q = servername; + if (p) { + p += 8; + while (*p > 32) + *q++ = *p++; + } + *q = 0; + } + /* + * XXX: this parsing isn't even remotely HTTP compliant... but in + * the interest of speed it doesn't totally have to be, it just + * needs to be extended to handle whatever servers folks want to + * test against. -djg + */ + + /* check response code */ + part = strstr(c->cbuff, "HTTP"); /* really HTTP/1.x_ */ if (part && strlen(part) > strlen("HTTP/1.x_")) { strncpy(respcode, (part + strlen("HTTP/1.x_")), 3); respcode[3] = '\0'; @@ -1453,74 +1455,74 @@ static void read_connection(struct connection * c) else { strcpy(respcode, "500"); } - - if (respcode[0] != '2') { - err_response++; - if (verbosity >= 2) - printf("WARNING: Response code not 2xx (%s)\n", respcode); - } - else if (verbosity >= 3) { - printf("LOG: Response code = %s\n", respcode); - } - c->gotheader = 1; - *s = 0; /* terminate at end of header */ - if (keepalive && - (strstr(c->cbuff, "Keep-Alive") - || strstr(c->cbuff, "keep-alive"))) { /* for benefit of MSIIS */ - char *cl; - cl = strstr(c->cbuff, "Content-Length:"); - /* handle NCSA, which sends Content-length: */ - if (!cl) - cl = strstr(c->cbuff, "Content-length:"); - if (cl) { - c->keepalive = 1; - c->length = atoi(cl + 16); - } - } - c->bread += c->cbx - (s + l - c->cbuff) + r - tocopy; - totalbread += c->bread; - } + + if (respcode[0] != '2') { + err_response++; + if (verbosity >= 2) + printf("WARNING: Response code not 2xx (%s)\n", respcode); + } + else if (verbosity >= 3) { + printf("LOG: Response code = %s\n", respcode); + } + c->gotheader = 1; + *s = 0; /* terminate at end of header */ + if (keepalive && + (strstr(c->cbuff, "Keep-Alive") + || strstr(c->cbuff, "keep-alive"))) { /* for benefit of MSIIS */ + char *cl; + cl = strstr(c->cbuff, "Content-Length:"); + /* handle NCSA, which sends Content-length: */ + if (!cl) + cl = strstr(c->cbuff, "Content-length:"); + if (cl) { + c->keepalive = 1; + c->length = atoi(cl + 16); + } + } + c->bread += c->cbx - (s + l - c->cbuff) + r - tocopy; + totalbread += c->bread; + } } else { - /* outside header, everything we have read is entity body */ - c->bread += r; - totalbread += r; + /* outside header, everything we have read is entity body */ + c->bread += r; + totalbread += r; } if (c->keepalive && (c->bread >= c->length)) { - /* finished a keep-alive connection */ - good++; - /* save out time */ - if (good == 1) { - /* first time here */ - doclen = c->bread; - } - else if (c->bread != doclen) { - bad++; - err_length++; - } - if (done < requests) { - struct data s; - doneka++; - if (done && heartbeatres && !(done % heartbeatres)) { - fprintf(stderr, "Completed %ld requests\n", done); - fflush(stderr); - } - c->done = apr_time_now(); - s.read = c->read; - s.starttime = c->start; - s.ctime = ap_max(0, (c->connect - c->start) / 1000); - s.waittime = ap_max(0, (c->beginread - c->endwrite) / 1000); - s.time = ap_max(0, (c->done - c->start) / 1000); - stats[done++] = s; - } - c->keepalive = 0; - c->length = 0; - c->gotheader = 0; - c->cbx = 0; - c->read = c->bread = 0; - c->start = c->connect = apr_time_now(); /* zero connect time with keep-alive */ - write_request(c); + /* finished a keep-alive connection */ + good++; + /* save out time */ + if (good == 1) { + /* first time here */ + doclen = c->bread; + } + else if (c->bread != doclen) { + bad++; + err_length++; + } + if (done < requests) { + struct data s; + doneka++; + if (done && heartbeatres && !(done % heartbeatres)) { + fprintf(stderr, "Completed %ld requests\n", done); + fflush(stderr); + } + c->done = apr_time_now(); + s.read = c->read; + s.starttime = c->start; + s.ctime = ap_max(0, (c->connect - c->start) / 1000); + s.waittime = ap_max(0, (c->beginread - c->endwrite) / 1000); + s.time = ap_max(0, (c->done - c->start) / 1000); + stats[done++] = s; + } + c->keepalive = 0; + c->length = 0; + c->gotheader = 0; + c->cbx = 0; + c->read = c->bread = 0; + c->start = c->connect = apr_time_now(); /* zero connect time with keep-alive */ + write_request(c); } } @@ -1539,21 +1541,21 @@ static void test(void) #endif if (isproxy) { - connecthost = apr_pstrdup(cntxt, proxyhost); - connectport = proxyport; + connecthost = apr_pstrdup(cntxt, proxyhost); + connectport = proxyport; } else { - connecthost = apr_pstrdup(cntxt, hostname); - connectport = port; + connecthost = apr_pstrdup(cntxt, hostname); + connectport = port; } if (!use_html) { - printf("Benchmarking %s ", hostname); - if (isproxy) - printf("[through %s:%d] ", proxyhost, proxyport); - printf("(be patient)%s", - (heartbeatres ? "\n" : "...")); - fflush(stdout); + printf("Benchmarking %s ", hostname); + if (isproxy) + printf("[through %s:%d] ", proxyhost, proxyport); + printf("(be patient)%s", + (heartbeatres ? "\n" : "...")); + fflush(stdout); } now = apr_time_now(); @@ -1568,38 +1570,38 @@ static void test(void) /* setup request */ if (posting <= 0) { - sprintf(request, "%s %s HTTP/1.0\r\n" - "User-Agent: ApacheBench/%s\r\n" - "%s" "%s" "%s" - "Host: %s%s\r\n" - "Accept: */*\r\n" - "%s" "\r\n", - (posting == 0) ? "GET" : "HEAD", - (isproxy) ? fullurl : path, - AP_AB_BASEREVISION, - keepalive ? "Connection: Keep-Alive\r\n" : "", - cookie, auth, host_field, colonhost, hdrs); + sprintf(request, "%s %s HTTP/1.0\r\n" + "User-Agent: ApacheBench/%s\r\n" + "%s" "%s" "%s" + "Host: %s%s\r\n" + "Accept: */*\r\n" + "%s" "\r\n", + (posting == 0) ? "GET" : "HEAD", + (isproxy) ? fullurl : path, + AP_AB_BASEREVISION, + keepalive ? "Connection: Keep-Alive\r\n" : "", + cookie, auth, host_field, colonhost, hdrs); } else { - sprintf(request, "POST %s HTTP/1.0\r\n" - "User-Agent: ApacheBench/%s\r\n" - "%s" "%s" "%s" - "Host: %s%s\r\n" - "Accept: */*\r\n" - "Content-length: %" APR_SIZE_T_FMT "\r\n" - "Content-type: %s\r\n" - "%s" - "\r\n", - (isproxy) ? fullurl : path, - AP_AB_BASEREVISION, - keepalive ? "Connection: Keep-Alive\r\n" : "", - cookie, auth, - host_field, colonhost, postlen, - (content_type[0]) ? content_type : "text/plain", hdrs); + sprintf(request, "POST %s HTTP/1.0\r\n" + "User-Agent: ApacheBench/%s\r\n" + "%s" "%s" "%s" + "Host: %s%s\r\n" + "Accept: */*\r\n" + "Content-length: %" APR_SIZE_T_FMT "\r\n" + "Content-type: %s\r\n" + "%s" + "\r\n", + (isproxy) ? fullurl : path, + AP_AB_BASEREVISION, + keepalive ? "Connection: Keep-Alive\r\n" : "", + cookie, auth, + host_field, colonhost, postlen, + (content_type[0]) ? content_type : "text/plain", hdrs); } if (verbosity >= 2) - printf("INFO: POST header == \n---\n%s\n---\n", request); + printf("INFO: POST header == \n---\n%s\n---\n", request); reqlen = strlen(request); @@ -1607,37 +1609,37 @@ static void test(void) * Combine headers and (optional) post file into one contineous buffer */ if (posting == 1) { - char *buff = malloc(postlen + reqlen + 1); + char *buff = malloc(postlen + reqlen + 1); if (!buff) { fprintf(stderr, "error creating request buffer: out of memory\n"); return; } - strcpy(buff, request); - strcpy(buff + reqlen, postdata); - request = buff; + strcpy(buff, request); + strcpy(buff + reqlen, postdata); + request = buff; } #ifdef NOT_ASCII inbytes_left = outbytes_left = reqlen; status = apr_xlate_conv_buffer(to_ascii, request, &inbytes_left, - request, &outbytes_left); + request, &outbytes_left); if (status || inbytes_left || outbytes_left) { - fprintf(stderr, "only simple translation is supported (%d/%u/%u)\n", - status, inbytes_left, outbytes_left); - exit(1); + fprintf(stderr, "only simple translation is supported (%d/%u/%u)\n", + status, inbytes_left, outbytes_left); + exit(1); } -#endif /* NOT_ASCII */ +#endif /* NOT_ASCII */ /* This only needs to be done once */ #ifdef USE_SSL if (ssl != 1) #endif if ((rv = apr_sockaddr_info_get(&destsa, connecthost, APR_UNSPEC, connectport, 0, cntxt)) - != APR_SUCCESS) { - char buf[120]; - apr_snprintf(buf, sizeof(buf), - "apr_sockaddr_info_get() for %s", connecthost); - apr_err(buf, rv); + != APR_SUCCESS) { + char buf[120]; + apr_snprintf(buf, sizeof(buf), + "apr_sockaddr_info_get() for %s", connecthost); + apr_err(buf, rv); } /* ok - lets start */ @@ -1645,41 +1647,41 @@ static void test(void) /* initialise lots of requests */ for (i = 0; i < concurrency; i++) { - con[i].socknum = i; - start_connect(&con[i]); + con[i].socknum = i; + start_connect(&con[i]); } while (done < requests) { - apr_int32_t n; - apr_int32_t timed; - const apr_pollfd_t *pollresults; - - /* check for time limit expiry */ - now = apr_time_now(); - timed = (apr_int32_t)apr_time_sec(now - start); - if (tlimit && timed >= tlimit) { - requests = done; /* so stats are correct */ - break; /* no need to do another round */ - } - - n = concurrency; + apr_int32_t n; + apr_int32_t timed; + const apr_pollfd_t *pollresults; + + /* check for time limit expiry */ + now = apr_time_now(); + timed = (apr_int32_t)apr_time_sec(now - start); + if (tlimit && timed >= tlimit) { + requests = done; /* so stats are correct */ + break; /* no need to do another round */ + } + + n = concurrency; #ifdef USE_SSL if (ssl == 1) status = APR_SUCCESS; else #endif - status = apr_pollset_poll(readbits, aprtimeout, &n, &pollresults); - if (status != APR_SUCCESS) - apr_err("apr_poll", status); - - if (!n) { - err("\nServer timed out\n\n"); - } - - for (i = 0; i < n; i++) { + status = apr_pollset_poll(readbits, aprtimeout, &n, &pollresults); + if (status != APR_SUCCESS) + apr_err("apr_poll", status); + + if (!n) { + err("\nServer timed out\n\n"); + } + + for (i = 0; i < n; i++) { const apr_pollfd_t *next_fd = &(pollresults[i]); struct connection *c; - + #ifdef USE_SSL if (ssl) c = &con[i]; @@ -1687,40 +1689,40 @@ static void test(void) #endif c = next_fd->client_data; - /* - * If the connection isn't connected how can we check it? - */ - if (c->state == STATE_UNCONNECTED) - continue; - + /* + * If the connection isn't connected how can we check it? + */ + if (c->state == STATE_UNCONNECTED) + continue; + #ifdef USE_SSL if (ssl == 1) rv = APR_POLLIN; else #endif - rv = next_fd->rtnevents; - - /* - * Notes: APR_POLLHUP is set after FIN is received on some - * systems, so treat that like APR_POLLIN so that we try to read - * again. - * - * Some systems return APR_POLLERR with APR_POLLHUP. We need to - * call read_connection() for APR_POLLHUP, so check for - * APR_POLLHUP first so that a closed connection isn't treated - * like an I/O error. If it is, we never figure out that the - * connection is done and we loop here endlessly calling - * apr_poll(). - */ - if ((rv & APR_POLLIN) || (rv & APR_POLLPRI) || (rv & APR_POLLHUP)) - read_connection(c); - if ((rv & APR_POLLERR) || (rv & APR_POLLNVAL)) { - bad++; - err_except++; - start_connect(c); - continue; - } - if (rv & APR_POLLOUT) { + rv = next_fd->rtnevents; + + /* + * Notes: APR_POLLHUP is set after FIN is received on some + * systems, so treat that like APR_POLLIN so that we try to read + * again. + * + * Some systems return APR_POLLERR with APR_POLLHUP. We need to + * call read_connection() for APR_POLLHUP, so check for + * APR_POLLHUP first so that a closed connection isn't treated + * like an I/O error. If it is, we never figure out that the + * connection is done and we loop here endlessly calling + * apr_poll(). + */ + if ((rv & APR_POLLIN) || (rv & APR_POLLPRI) || (rv & APR_POLLHUP)) + read_connection(c); + if ((rv & APR_POLLERR) || (rv & APR_POLLNVAL)) { + bad++; + err_except++; + start_connect(c); + continue; + } + if (rv & APR_POLLOUT) { if (c->state == STATE_CONNECTING) { apr_pollfd_t remove_pollfd; rv = apr_socket_connect(c->aprsock, destsa); @@ -1748,14 +1750,14 @@ static void test(void) write_request(c); } } - - /* - * When using a select based poll every time we check the bits - * are reset. In 1.3's ab we copied the FD_SET's each time - * through, but here we're going to check the state and if the - * connection is in STATE_READ or STATE_CONNECTING we'll add the - * socket back in as APR_POLLIN. - */ + + /* + * When using a select based poll every time we check the bits + * are reset. In 1.3's ab we copied the FD_SET's each time + * through, but here we're going to check the state and if the + * connection is in STATE_READ or STATE_CONNECTING we'll add the + * socket back in as APR_POLLIN. + */ #ifdef USE_SSL if (ssl != 1) #endif @@ -1767,18 +1769,18 @@ static void test(void) new_pollfd.client_data = c; apr_pollset_add(readbits, &new_pollfd); } - } + } } if (heartbeatres) - fprintf(stderr, "Finished %ld requests\n", done); + fprintf(stderr, "Finished %ld requests\n", done); else - printf("..done\n"); + printf("..done\n"); if (use_html) - output_html_results(); + output_html_results(); else - output_results(); + output_results(); } /* ------------------------------------------------------- */ @@ -1787,17 +1789,17 @@ static void test(void) static void copyright(void) { if (!use_html) { - printf("This is ApacheBench, Version %s\n", AP_AB_BASEREVISION " <$Revision: 1.143 $> apache-2.0"); - printf("Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/\n"); - printf("Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/\n"); - printf("\n"); + printf("This is ApacheBench, Version %s\n", AP_AB_BASEREVISION " <$Revision: 1.144 $> apache-2.0"); + printf("Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/\n"); + printf("Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/\n"); + printf("\n"); } else { - printf("

\n"); - printf(" This is ApacheBench, Version %s <%s> apache-2.0
\n", AP_AB_BASEREVISION, "$Revision: 1.143 $"); - printf(" Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
\n"); - printf(" Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
\n"); - printf("

\n

\n"); + printf("

\n"); + printf(" This is ApacheBench, Version %s <%s> apache-2.0
\n", AP_AB_BASEREVISION, "$Revision: 1.144 $"); + printf(" Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
\n"); + printf(" Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
\n"); + printf("

\n

\n"); } } @@ -1806,9 +1808,9 @@ static void usage(const char *progname) { fprintf(stderr, "Usage: %s [options] [http" #ifdef USE_SSL - "[s]" + "[s]" #endif - "://]hostname[:port]/path\n", progname); + "://]hostname[:port]/path\n", progname); fprintf(stderr, "Options are:\n"); fprintf(stderr, " -n requests Number of requests to perform\n"); fprintf(stderr, " -c concurrency Number of multiple requests to make\n"); @@ -1857,49 +1859,49 @@ static int parse_url(char *url) fullurl = apr_pstrdup(cntxt, url); if (strlen(url) > 7 && strncmp(url, "http://", 7) == 0) { - url += 7; + url += 7; #ifdef USE_SSL - ssl = 0; + ssl = 0; #endif } else #ifdef USE_SSL if (strlen(url) > 8 && strncmp(url, "https://", 8) == 0) { - url += 8; - ssl = 1; + url += 8; + ssl = 1; } #else if (strlen(url) > 8 && strncmp(url, "https://", 8) == 0) { - fprintf(stderr, "SSL not compiled in; no https support\n"); - exit(1); + fprintf(stderr, "SSL not compiled in; no https support\n"); + exit(1); } #endif if ((cp = strchr(url, '/')) == NULL) - return 1; + return 1; h = apr_palloc(cntxt, cp - url + 1); memcpy(h, url, cp - url); h[cp - url] = '\0'; rv = apr_parse_addr_port(&hostname, &scope_id, &port, h, cntxt); if (rv != APR_SUCCESS || !hostname || scope_id) { - return 1; + return 1; } path = apr_pstrdup(cntxt, cp); *cp = '\0'; - if (*url == '[') { /* IPv6 numeric address string */ - host_field = apr_psprintf(cntxt, "[%s]", hostname); + if (*url == '[') { /* IPv6 numeric address string */ + host_field = apr_psprintf(cntxt, "[%s]", hostname); } else { - host_field = hostname; + host_field = hostname; } - if (port == 0) { /* no port specified */ + if (port == 0) { /* no port specified */ #ifdef USE_SSL if (ssl == 1) port = 443; else #endif - port = 80; + port = 80; } if (( @@ -1908,9 +1910,9 @@ static int parse_url(char *url) #endif (port != 80))) { - colonhost = apr_psprintf(cntxt,":%d",port); + colonhost = apr_psprintf(cntxt,":%d",port); } else - colonhost = ""; + colonhost = ""; return 0; } @@ -1929,30 +1931,30 @@ static int open_postfile(const char *pfile) rv = apr_file_open(&postfd, pfile, APR_READ, mode, cntxt); if (rv != APR_SUCCESS) { - printf("Invalid postfile name (%s): %s\n", pfile, - apr_strerror(rv, errmsg, sizeof errmsg)); - return rv; + printf("Invalid postfile name (%s): %s\n", pfile, + apr_strerror(rv, errmsg, sizeof errmsg)); + return rv; } apr_file_info_get(&finfo, APR_FINFO_NORM, postfd); postlen = (apr_size_t)finfo.size; postdata = (char *) malloc(postlen); if (!postdata) { - printf("Can\'t alloc postfile buffer\n"); - return APR_ENOMEM; + printf("Can\'t alloc postfile buffer\n"); + return APR_ENOMEM; } length = postlen; rv = apr_file_read(postfd, postdata, &length); if (rv != APR_SUCCESS) { - printf("error reading postfile: %s\n", - apr_strerror(rv, errmsg, sizeof errmsg)); - return rv; + printf("error reading postfile: %s\n", + apr_strerror(rv, errmsg, sizeof errmsg)); + return rv; } if (length != postlen) { - printf("error reading postfile: read only %" - APR_SIZE_T_FMT " bytes", - length); - return APR_EINVAL; + printf("error reading postfile: read only %" + APR_SIZE_T_FMT " bytes", + length); + return APR_EINVAL; } apr_file_close(postfd); return 0; @@ -1986,194 +1988,193 @@ int main(int argc, const char * const argv[]) #ifdef NOT_ASCII status = apr_xlate_open(&to_ascii, "ISO8859-1", APR_DEFAULT_CHARSET, cntxt); if (status) { - fprintf(stderr, "apr_xlate_open(to ASCII)->%d\n", status); - exit(1); + fprintf(stderr, "apr_xlate_open(to ASCII)->%d\n", status); + exit(1); } status = apr_xlate_open(&from_ascii, APR_DEFAULT_CHARSET, "ISO8859-1", cntxt); if (status) { - fprintf(stderr, "apr_xlate_open(from ASCII)->%d\n", status); - exit(1); + fprintf(stderr, "apr_xlate_open(from ASCII)->%d\n", status); + exit(1); } status = apr_base64init_ebcdic(to_ascii, from_ascii); if (status) { - fprintf(stderr, "apr_base64init_ebcdic()->%d\n", status); - exit(1); + fprintf(stderr, "apr_base64init_ebcdic()->%d\n", status); + exit(1); } #endif apr_getopt_init(&opt, cntxt, argc, argv); while ((status = apr_getopt(opt, "n:c:t:T:p:v:kVhwix:y:z:C:H:P:A:g:X:de:Sq" #ifdef USE_SSL - "s" + "s" #endif - ,&c, &optarg)) == APR_SUCCESS) { - switch (c) { - case 's': + ,&c, &optarg)) == APR_SUCCESS) { + switch (c) { + case 's': #ifdef USE_SSL - ssl = 1; - break; + ssl = 1; + break; #else - fprintf(stderr, "SSL not compiled in; no https support\n"); - exit(1); + fprintf(stderr, "SSL not compiled in; no https support\n"); + exit(1); #endif - case 'n': - requests = atoi(optarg); - if (!requests) { - err("Invalid number of requests\n"); - } - break; - case 'k': - keepalive = 1; - break; - case 'q': - heartbeatres = 0; - break; - case 'c': - concurrency = atoi(optarg); - break; - case 'i': - if (posting == 1) - err("Cannot mix POST and HEAD\n"); - posting = -1; - break; - case 'g': - gnuplot = strdup(optarg); - break; - case 'd': - percentile = 0; - break; - case 'e': - csvperc = strdup(optarg); - break; - case 'S': - confidence = 0; - break; - case 'p': - if (posting != 0) - err("Cannot mix POST and HEAD\n"); - - if (0 == (r = open_postfile(optarg))) { - posting = 1; - } - else if (postdata) { - exit(r); - } - break; - case 'v': - verbosity = atoi(optarg); - break; - case 't': - tlimit = atoi(optarg); - requests = MAX_REQUESTS; /* need to size data array on - * something */ - break; - case 'T': - strcpy(content_type, optarg); - break; - case 'C': - cookie = apr_pstrcat(cntxt, "Cookie: ", optarg, "\r\n", NULL); - break; - case 'A': - /* - * assume username passwd already to be in colon separated form. - * Ready to be uu-encoded. - */ - while (apr_isspace(*optarg)) - optarg++; - if (apr_base64_encode_len(strlen(optarg)) > sizeof(tmp)) { - err("Authentication credentials too long\n"); - } - l = apr_base64_encode(tmp, optarg, strlen(optarg)); - tmp[l] = '\0'; - - auth = apr_pstrcat(cntxt, auth, "Authorization: Basic ", tmp, - "\r\n", NULL); - break; - case 'P': - /* - * assume username passwd already to be in colon separated form. - */ - while (apr_isspace(*optarg)) - optarg++; - if (apr_base64_encode_len(strlen(optarg)) > sizeof(tmp)) { - err("Proxy credentials too long\n"); - } - l = apr_base64_encode(tmp, optarg, strlen(optarg)); - tmp[l] = '\0'; - - auth = apr_pstrcat(cntxt, auth, "Proxy-Authorization: Basic ", - tmp, "\r\n", NULL); - break; - case 'H': - hdrs = apr_pstrcat(cntxt, hdrs, optarg, "\r\n", NULL); - break; - case 'w': - use_html = 1; - break; - /* - * if any of the following three are used, turn on html output - * automatically - */ - case 'x': - use_html = 1; - tablestring = optarg; - break; - case 'X': - { - char *p; - /* - * assume proxy-name[:port] + case 'n': + requests = atoi(optarg); + if (!requests) { + err("Invalid number of requests\n"); + } + break; + case 'k': + keepalive = 1; + break; + case 'q': + heartbeatres = 0; + break; + case 'c': + concurrency = atoi(optarg); + break; + case 'i': + if (posting == 1) + err("Cannot mix POST and HEAD\n"); + posting = -1; + break; + case 'g': + gnuplot = strdup(optarg); + break; + case 'd': + percentile = 0; + break; + case 'e': + csvperc = strdup(optarg); + break; + case 'S': + confidence = 0; + break; + case 'p': + if (posting != 0) + err("Cannot mix POST and HEAD\n"); + if (0 == (r = open_postfile(optarg))) { + posting = 1; + } + else if (postdata) { + exit(r); + } + break; + case 'v': + verbosity = atoi(optarg); + break; + case 't': + tlimit = atoi(optarg); + requests = MAX_REQUESTS; /* need to size data array on + * something */ + break; + case 'T': + strcpy(content_type, optarg); + break; + case 'C': + cookie = apr_pstrcat(cntxt, "Cookie: ", optarg, "\r\n", NULL); + break; + case 'A': + /* + * assume username passwd already to be in colon separated form. + * Ready to be uu-encoded. + */ + while (apr_isspace(*optarg)) + optarg++; + if (apr_base64_encode_len(strlen(optarg)) > sizeof(tmp)) { + err("Authentication credentials too long\n"); + } + l = apr_base64_encode(tmp, optarg, strlen(optarg)); + tmp[l] = '\0'; + + auth = apr_pstrcat(cntxt, auth, "Authorization: Basic ", tmp, + "\r\n", NULL); + break; + case 'P': + /* + * assume username passwd already to be in colon separated form. */ - if ((p = strchr(optarg, ':'))) { - *p = '\0'; - p++; - proxyport = atoi(p); - } - strcpy(proxyhost, optarg); - isproxy = 1; - } - break; - case 'y': - use_html = 1; - trstring = optarg; - break; - case 'z': - use_html = 1; - tdstring = optarg; - break; - case 'h': - usage(argv[0]); - break; - case 'V': - copyright(); - return 0; - } + while (apr_isspace(*optarg)) + optarg++; + if (apr_base64_encode_len(strlen(optarg)) > sizeof(tmp)) { + err("Proxy credentials too long\n"); + } + l = apr_base64_encode(tmp, optarg, strlen(optarg)); + tmp[l] = '\0'; + + auth = apr_pstrcat(cntxt, auth, "Proxy-Authorization: Basic ", + tmp, "\r\n", NULL); + break; + case 'H': + hdrs = apr_pstrcat(cntxt, hdrs, optarg, "\r\n", NULL); + break; + case 'w': + use_html = 1; + break; + /* + * if any of the following three are used, turn on html output + * automatically + */ + case 'x': + use_html = 1; + tablestring = optarg; + break; + case 'X': + { + char *p; + /* + * assume proxy-name[:port] + */ + if ((p = strchr(optarg, ':'))) { + *p = '\0'; + p++; + proxyport = atoi(p); + } + strcpy(proxyhost, optarg); + isproxy = 1; + } + break; + case 'y': + use_html = 1; + trstring = optarg; + break; + case 'z': + use_html = 1; + tdstring = optarg; + break; + case 'h': + usage(argv[0]); + break; + case 'V': + copyright(); + return 0; + } } if (opt->ind != argc - 1) { - fprintf(stderr, "%s: wrong number of arguments\n", argv[0]); - usage(argv[0]); + fprintf(stderr, "%s: wrong number of arguments\n", argv[0]); + usage(argv[0]); } if (parse_url(apr_pstrdup(cntxt, opt->argv[opt->ind++]))) { - fprintf(stderr, "%s: invalid URL\n", argv[0]); - usage(argv[0]); + fprintf(stderr, "%s: invalid URL\n", argv[0]); + usage(argv[0]); } if ((concurrency < 0) || (concurrency > MAX_CONCURRENCY)) { - fprintf(stderr, "%s: Invalid Concurrency [Range 0..%d]\n", + fprintf(stderr, "%s: Invalid Concurrency [Range 0..%d]\n", argv[0], MAX_CONCURRENCY); usage(argv[0]); } if ((heartbeatres) && (requests > 150)) { - heartbeatres = requests / 10; /* Print line every 10% of requests */ - if (heartbeatres < 100) - heartbeatres = 100; /* but never more often than once every 100 - * connections. */ + heartbeatres = requests / 10; /* Print line every 10% of requests */ + if (heartbeatres < 100) + heartbeatres = 100; /* but never more often than once every 100 + * connections. */ } else - heartbeatres = 0; + heartbeatres = 0; #ifdef USE_SSL #ifdef RSAREF @@ -2188,9 +2189,9 @@ int main(int argc, const char * const argv[]) /* TODO: Allow force SSLv2_client_method() (TLSv1?) */ if (!(ctx = SSL_CTX_new(SSLv23_client_method()))) { - fprintf(stderr, "Could not init SSL CTX"); - ERR_print_errors_fp(stderr); - exit(1); + fprintf(stderr, "Could not init SSL CTX"); + ERR_print_errors_fp(stderr); + exit(1); } SSL_CTX_set_options(ctx, SSL_OP_ALL); #ifdef USE_THREADS @@ -2199,7 +2200,7 @@ int main(int argc, const char * const argv[]) #endif #ifdef SIGPIPE apr_signal(SIGPIPE, SIG_IGN); /* Ignore writes to connections that - * have been closed at the other end. */ + * have been closed at the other end. */ #endif copyright(); test();