--- ab.c.orig 2011-01-15 02:12:47.000000000 +0000 +++ ab.c.orig 2011-01-25 01:02:22.000000000 +0000 @@ -243,6 +243,7 @@ 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 kasent; /* keep-alive requests sent by this connection */ int gotheader; /* non-zero if we have the entire header in * cbuff */ apr_time_t start, /* Start of connection */ @@ -282,6 +283,7 @@ int confidence = 1; /* Show confidence estimator and warnings */ int tlimit = 0; /* time limit in secs */ int keepalive = 0; /* try and do keepalive connections */ +int maxkarequests = 0; /* max requests to send per keep-alive connection */ int windowsize = 0; /* we use the OS default window size */ char servername[1024]; /* name that server reports */ char *hostname; /* host name from URL */ @@ -1154,6 +1156,7 @@ c->read = 0; c->bread = 0; c->keepalive = 0; + c->kasent = 0; c->cbx = 0; c->gotheader = 0; c->rwrite = 0; @@ -1516,6 +1519,13 @@ bad++; err_length++; } + /* implement max requests per keep-alive connection */ + c->kasent++; + if ( keepalive && maxkarequests && c->kasent == maxkarequests ) { + doneka++; + close_connection(c); + return; + } else if (done < requests) { struct data *s = &stats[done++]; doneka++; @@ -1868,6 +1878,7 @@ fprintf(stderr, " -X proxy:port Proxyserver and port number to use\n"); fprintf(stderr, " -V Print version number and exit\n"); fprintf(stderr, " -k Use HTTP KeepAlive feature\n"); + fprintf(stderr, " -m count Maximum of requests per KeepAlive connection\n"); fprintf(stderr, " -d Do not show percentiles served table.\n"); fprintf(stderr, " -S Do not show confidence estimators and warnings.\n"); fprintf(stderr, " -g filename Output collected data to gnuplot format file.\n"); @@ -2040,7 +2051,7 @@ #endif apr_getopt_init(&opt, cntxt, argc, argv); - while ((status = apr_getopt(opt, "n:c:t:b:T:p:u:v:rkVhwix:y:z:C:H:P:A:g:X:de:Sq" + while ((status = apr_getopt(opt, "n:c:t:b:T:p:u:v:rkVhwix:y:z:C:H:P:A:g:X:de:Sqm:" #ifdef USE_SSL "Z:f:" #endif @@ -2055,6 +2066,9 @@ case 'k': keepalive = 1; break; + case 'm': + maxkarequests = atoi(optarg); + break; case 'q': heartbeatres = 0; break;