From 98aec90fac08ec5394af576f51dc2436bf17703a Mon Sep 17 00:00:00 2001 From: sma Date: Tue, 17 Jun 2008 09:31:15 +0000 Subject: ChangeLogTag: Tue Jun 17 09:30:00 UTC 2008 Simon Massey --- ACE/ChangeLog | 11 + ACE/apps/JAWS/clients/WebSTONE/src/bench.c | 2 +- ACE/apps/JAWS/clients/WebSTONE/src/errexit.c | 6 +- ACE/apps/JAWS/clients/WebSTONE/src/genrand.c | 2 +- ACE/apps/JAWS/clients/WebSTONE/src/timefunc.c | 4 +- ACE/apps/JAWS/clients/WebSTONE/src/webclient.c | 1044 ++++++++++++------------ ACE/apps/JAWS/clients/WebSTONE/src/webmaster.c | 1025 ++++++++++++----------- 7 files changed, 1051 insertions(+), 1043 deletions(-) diff --git a/ACE/ChangeLog b/ACE/ChangeLog index d59fe6f04cf..1d71c453d6e 100644 --- a/ACE/ChangeLog +++ b/ACE/ChangeLog @@ -1,3 +1,14 @@ +Tue Jun 17 09:30:00 UTC 2008 Simon Massey + + * apps/JAWS/clients/WebSTONE/src/bench.c: + * apps/JAWS/clients/WebSTONE/src/errexit.c: + * apps/JAWS/clients/WebSTONE/src/genrand.c: + * apps/JAWS/clients/WebSTONE/src/timefunc.c: + * apps/JAWS/clients/WebSTONE/src/webclient.c: + * apps/JAWS/clients/WebSTONE/src/webmaster.c: + + Fuzz errors, Untabify. + Tue Jun 17 08:13:00 UTC 2008 Simon Massey * include/make_include/platform_sunos5_common.GNU: diff --git a/ACE/apps/JAWS/clients/WebSTONE/src/bench.c b/ACE/apps/JAWS/clients/WebSTONE/src/bench.c index 3c3d84a34f6..1cf9aebc76b 100644 --- a/ACE/apps/JAWS/clients/WebSTONE/src/bench.c +++ b/ACE/apps/JAWS/clients/WebSTONE/src/bench.c @@ -1,7 +1,7 @@ /* $Id$ */ /************************************************************************** * - * Copyright (C) 1995 Silicon Graphics, Inc. + * Copyright (C) 1995 Silicon Graphics, Inc. * * These coded instructions, statements, and computer programs were * developed by SGI for public use. If any changes are made to this code diff --git a/ACE/apps/JAWS/clients/WebSTONE/src/errexit.c b/ACE/apps/JAWS/clients/WebSTONE/src/errexit.c index 8f2fcba176c..51cccc14805 100644 --- a/ACE/apps/JAWS/clients/WebSTONE/src/errexit.c +++ b/ACE/apps/JAWS/clients/WebSTONE/src/errexit.c @@ -1,7 +1,7 @@ /* $Id$ */ /************************************************************************** * - * Copyright (C) 1995 Silicon Graphics, Inc. + * Copyright (C) 1995 Silicon Graphics, Inc. * * These coded instructions, statements, and computer programs were * developed by SGI for public use. If any changes are made to this code @@ -25,10 +25,10 @@ #include "bench.h" #ifdef HAVE_VPRINTF -#define VPRINTF(stderr, format, args) vfprintf((stderr), (format), (args)) +#define VPRINTF(stderr, format, args) vfprintf((stderr), (format), (args)) #else #ifdef HAVE_DOPRNT -#define VPRINTF(stderr, format, args) _doprnt((format), (args), (stderr)) +#define VPRINTF(stderr, format, args) _doprnt((format), (args), (stderr)) #endif /* HAVE_DOPRNT */ #endif /* HAVE_VPRINTF */ diff --git a/ACE/apps/JAWS/clients/WebSTONE/src/genrand.c b/ACE/apps/JAWS/clients/WebSTONE/src/genrand.c index 400e88a55b1..e6100fc1d0b 100644 --- a/ACE/apps/JAWS/clients/WebSTONE/src/genrand.c +++ b/ACE/apps/JAWS/clients/WebSTONE/src/genrand.c @@ -1,7 +1,7 @@ /* $Id$ */ /************************************************************************** * - * Copyright (C) 1995 Silicon Graphics, Inc. + * Copyright (C) 1995 Silicon Graphics, Inc. * * These coded instructions, statements, and computer programs were * developed by SGI for public use. If any changes are made to this code diff --git a/ACE/apps/JAWS/clients/WebSTONE/src/timefunc.c b/ACE/apps/JAWS/clients/WebSTONE/src/timefunc.c index 38def53033a..4dd9239aa33 100644 --- a/ACE/apps/JAWS/clients/WebSTONE/src/timefunc.c +++ b/ACE/apps/JAWS/clients/WebSTONE/src/timefunc.c @@ -128,7 +128,7 @@ sqtime(struct timeval *Time, struct timeval *SqTime) double sec; sec = timevaldouble(Time); - sec *= sec; /* square */ + sec *= sec; /* square */ doubletimeval(sec, SqTime); } @@ -167,5 +167,3 @@ thruputpersec(const double n, struct timeval *t) else return 0; } - - diff --git a/ACE/apps/JAWS/clients/WebSTONE/src/webclient.c b/ACE/apps/JAWS/clients/WebSTONE/src/webclient.c index 42084842904..cd8f3b48391 100644 --- a/ACE/apps/JAWS/clients/WebSTONE/src/webclient.c +++ b/ACE/apps/JAWS/clients/WebSTONE/src/webclient.c @@ -1,13 +1,13 @@ /* $Id$ */ /************************************************************************** * * - * Copyright (C) 1995 Silicon Graphics, Inc. * - * * - * These coded instructions, statements, and computer programs were * + * Copyright (C) 1995 Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs were * * developed by SGI for public use. If any changes are made to this code* * please try to get the changes back to the author. Feel free to make * - * modifications and changes to the code and release it. * - * * + * modifications and changes to the code and release it. * + * * **************************************************************************/ /* FUZZ: disable check_for_math_include */ @@ -65,42 +65,42 @@ #define DEFAULTWWWPORT 80 #define LOG_FILE "logfile" #ifdef WIN32 -#define DEBUG_FILE "c:/tmp/webstone-debug" +#define DEBUG_FILE "c:/tmp/webstone-debug" #else -#define DEBUG_FILE "/tmp/webstone-debug" +#define DEBUG_FILE "/tmp/webstone-debug" #endif /* WIN32 */ #define NCCARGS 4096 /* global variables */ - THREAD FILE *debugfile = stderr; + THREAD FILE *debugfile = stderr; page_list_t *load_file_list; /* actually a dynamic array */ -int amclient = 0; -int havewebserver = 0; -int haveproxyserver = 0; -int savefile = 0; -NETPORT portnum = DEFAULTWWWPORT; -int timeexpired = 0; +int amclient = 0; +int havewebserver = 0; +int haveproxyserver = 0; +int savefile = 0; +NETPORT portnum = DEFAULTWWWPORT; +int timeexpired = 0; int debug = 0; -long int number_of_pages = 0; -char webmaster[MAXHOSTNAMELEN]; -char webserver[MAXHOSTNAMELEN]; -char proxyserver[MAXHOSTNAMELEN]; +long int number_of_pages = 0; +char webmaster[MAXHOSTNAMELEN]; +char webserver[MAXHOSTNAMELEN]; +char proxyserver[MAXHOSTNAMELEN]; #ifdef WIN32 -HANDLE hSemaphore; -int CounterSemaphore = 0; /* counter semaphore for children */ +HANDLE hSemaphore; +int CounterSemaphore = 0; /* counter semaphore for children */ #endif /* WIN32 */ static void ClientThread(void *); /* used to bypass DNS/YP name resolution for every page */ -struct hostent webserv_phe, webmast_phe; -struct protoent webserv_ppe, webmast_ppe; -unsigned long webserv_addr, webmast_addr; -short webserv_type, webmast_type; /* socket type */ +struct hostent webserv_phe, webmast_phe; +struct protoent webserv_ppe, webmast_ppe; +unsigned long webserv_addr, webmast_addr; +short webserv_type, webmast_type; /* socket type */ /* End of globals */ @@ -109,7 +109,7 @@ static void usage(const char *progname) { returnerr("Usage: %s [-d] [-w webserver] [-p port_num]\n", - progname); + progname); returnerr("\t[-c masterhost:port] [-t run_time | -l loops]\n"); returnerr("\t[-n numclients] [-R]\n"); returnerr("\t[-f config_file] [-u uilfile | url ...]\n"); @@ -146,26 +146,26 @@ childhandler(void) */ int resolve_addrs(char *host, char *protocol, struct hostent *host_phe, struct protoent *proto_ppe, unsigned long *addr, - short *type) { + short *type) { struct hostent *phe; struct protoent *ppe; /* if IP address given, convert to internal form */ if (host[0] >= '0' && host[0] <= '9') { - *addr = inet_addr(host); - if (*addr == INADDR_NONE) - return(returnerr("Invalid IP address %s\n", host)); + *addr = inet_addr(host); + if (*addr == INADDR_NONE) + return(returnerr("Invalid IP address %s\n", host)); } else { - /* look up by name */ - phe = gethostbyname(host); - if (phe == 0) - { - D_PRINTF( "Gethostbyname failed: %s", neterrstr() ); - return(returnerr("Can't get %s host entry\n", host)); - } - memcpy(host_phe, phe, sizeof(struct hostent)); - memcpy((char *)addr, phe->h_addr, sizeof(*addr)); + /* look up by name */ + phe = gethostbyname(host); + if (phe == 0) + { + D_PRINTF( "Gethostbyname failed: %s", neterrstr() ); + return(returnerr("Can't get %s host entry\n", host)); + } + memcpy(host_phe, phe, sizeof(struct hostent)); + memcpy((char *)addr, phe->h_addr, sizeof(*addr)); } /* Map protocol name to protocol number */ @@ -173,8 +173,8 @@ struct protoent *ppe; if (ppe == 0) { - D_PRINTF( "protobyname returned %d\n", ppe ); - return(returnerr("Can't get %s protocol entry\n",protocol)); + D_PRINTF( "protobyname returned %d\n", ppe ); + return(returnerr("Can't get %s protocol entry\n",protocol)); } memcpy(proto_ppe, ppe, sizeof(struct protoent)); @@ -183,13 +183,13 @@ struct protoent *ppe; /* Use protocol to choose a socket type */ if (strcmp(protocol,"udp") == 0) { - *type = SOCK_DGRAM; + *type = SOCK_DGRAM; } else { - *type = SOCK_STREAM; - D_PRINTF( "Choosing SOCK_STREAM %d type %d %s\n", - SOCK_STREAM, *type, neterrstr() ); + *type = SOCK_STREAM; + D_PRINTF( "Choosing SOCK_STREAM %d type %d %s\n", + SOCK_STREAM, *type, neterrstr() ); } return 0; @@ -199,14 +199,14 @@ struct protoent *ppe; SOCKET connectsock(char *host, NETPORT portnum, char *protocol) { - struct sockaddr_in sin; /* an Internet endpoint address */ - SOCKET s; /* socket descriptor */ - int type; /* socket type */ - short proto; - int returnval; /* temporary return value */ + struct sockaddr_in sin; /* an Internet endpoint address */ + SOCKET s; /* socket descriptor */ + int type; /* socket type */ + short proto; + int returnval; /* temporary return value */ D_PRINTF( "Beginning connectsock; host=%s port=%d proto=%s\n", host, - portnum, protocol ); + portnum, protocol ); sin.sin_family = AF_INET; memset((char *)&sin, 0, sizeof(sin)); @@ -227,13 +227,13 @@ connectsock(char *host, NETPORT portnum, char *protocol) proto = webmast_ppe.p_proto; type = webmast_type; } else { - struct hostent host_phe; - struct protoent host_ppe; - unsigned long host_addr; - short host_type; /* socket type */ + struct hostent host_phe; + struct protoent host_ppe; + unsigned long host_addr; + short host_type; /* socket type */ if (resolve_addrs(host, "tcp", &host_phe, &host_ppe, &host_addr, &host_type)) - return returnerr("Can't resolve hostname %s in get()\n", host); + return returnerr("Can't resolve hostname %s in get()\n", host); sin.sin_addr.S_ADDR = host_addr; sin.sin_family = PF_INET; proto = host_ppe.p_proto; @@ -243,7 +243,7 @@ connectsock(char *host, NETPORT portnum, char *protocol) /* Allocate a socket */ s = socket(PF_INET, type, proto); D_PRINTF( "Socket %d returned %d, %s\n", - type, s, neterrstr() ); + type, s, neterrstr() ); if (BADSOCKET(s)) { @@ -253,14 +253,14 @@ connectsock(char *host, NETPORT portnum, char *protocol) /* Connect the socket */ D_PRINTF( "Trying to connect %d with size %d, %s\n", - s, sizeof(sin), neterrstr() ); + s, sizeof(sin), neterrstr() ); D_PRINTF( "Address is family %d, port %d, addr %s\n", - sin.sin_family, ntohs(sin.sin_port), - inet_ntoa(sin.sin_addr) ); + sin.sin_family, ntohs(sin.sin_port), + inet_ntoa(sin.sin_addr) ); returnval = connect(s, (struct sockaddr *)&sin, sizeof(sin)); D_PRINTF( "Connect returned %d, %s\n", - returnval, neterrstr() ); + returnval, neterrstr() ); if (returnval < 0) { D_PRINTF( "Can't connect: %s\n", neterrstr() ); @@ -277,11 +277,11 @@ connectsock(char *host, NETPORT portnum, char *protocol) SOCKET connecttomaster(char *str) { - char *tempch; - SOCKET sock; - char msg[100]; - char ConnectStr[100]; /* Fix to handle multiple threads */ - int tries; + char *tempch; + SOCKET sock; + char msg[100]; + char ConnectStr[100]; /* Fix to handle multiple threads */ + int tries; strcpy(ConnectStr, str); @@ -295,9 +295,9 @@ connecttomaster(char *str) * HOSTNAME:PORT OR HOST-IP:PORT */ D_PRINTF( "Incorrect format %s: use hostname:port or ip_addr:port\n", - ConnectStr ); - return(returnerr("Incorrect format %s: use host:port or ip_addr:port\n", - ConnectStr)); + ConnectStr ); + return(returnerr("Incorrect format %s: use host:port or ip_addr:port\n", + ConnectStr)); } /* @@ -311,21 +311,21 @@ connecttomaster(char *str) * reject a connection if there are a lot of client processes */ #define MAXTRIES 30 -#define TRYDELAY_SEC 1 +#define TRYDELAY_SEC 1 for (tries = 0; tries < MAXTRIES; tries++) { sock = connectsock(ConnectStr,(NETPORT)atoi(tempch),"tcp"); - if (!BADSOCKET(sock)) - break; + if (!BADSOCKET(sock)) + break; - sleep(TRYDELAY_SEC); + sleep(TRYDELAY_SEC); } if (BADSOCKET(sock)) { - /* ERROR CONNECTING TO MASTER PROCESS */ - return(returnerr("Could not connect to master process\n")); + /* ERROR CONNECTING TO MASTER PROCESS */ + return(returnerr("Could not connect to master process\n")); } /* @@ -335,15 +335,15 @@ connecttomaster(char *str) */ if(NETWRITE(sock,READYSTR,READYSTRLEN) != READYSTRLEN) { - return(returnerr("Error sending READY message to master")); + return(returnerr("Error sending READY message to master")); } memset(msg,0,GOSTRLEN+1); if(NETREAD(sock,msg,GOSTRLEN) != GOSTRLEN) { - D_PRINTF( "Error receiving GO message from master: %s\n", neterrstr() - ); - return(returnerr("Error receiving GO message from master\n")); + D_PRINTF( "Error receiving GO message from master: %s\n", neterrstr() + ); + return(returnerr("Error receiving GO message from master\n")); } if(strncmp(GOSTR,msg,GOSTRLEN)) @@ -351,7 +351,7 @@ connecttomaster(char *str) /* * WE RECEIVED A MESSAGE OTHER THAN GO. PRINT IT OUT AND RETURN ERROR */ - return(returnerr("Received non-GO message %s\n",msg)); + return(returnerr("Received non-GO message %s\n",msg)); } return(sock); @@ -362,36 +362,36 @@ connecttomaster(char *str) static void accumstats(rqst_timer_t *rqsttimer, page_stats_t *pagestats, stats_t *timestat) { - rqst_stats_t rqststats; + rqst_stats_t rqststats; -#define TFMT "%10u:%10u" +#define TFMT "%10u:%10u" /* * DUMP THE TIMING INFORMATION HERE, OR COMPUTE WHAT YOU WANT TO * PRINT OUT LATER. */ D_PRINTF( "Total bytes read: %d \t Body size read: %d\n", - rqsttimer->totalbytes, - rqsttimer->bodybytes ); + rqsttimer->totalbytes, + rqsttimer->bodybytes ); D_PRINTF( "Enter time: " TFMT " \t Exit Time: " TFMT "\n", - rqsttimer->entertime.tv_sec, - rqsttimer->entertime.tv_usec, - rqsttimer->exittime.tv_sec, - rqsttimer->exittime.tv_usec ); + rqsttimer->entertime.tv_sec, + rqsttimer->entertime.tv_usec, + rqsttimer->exittime.tv_sec, + rqsttimer->exittime.tv_usec ); D_PRINTF( "Before connect: " TFMT " \t After connect: " TFMT "\n", - rqsttimer->beforeconnect.tv_sec, - rqsttimer->beforeconnect.tv_usec, - rqsttimer->afterconnect.tv_sec, - rqsttimer->afterconnect.tv_usec ); + rqsttimer->beforeconnect.tv_sec, + rqsttimer->beforeconnect.tv_usec, + rqsttimer->afterconnect.tv_sec, + rqsttimer->afterconnect.tv_usec ); D_PRINTF( "Before header: " TFMT " \t After header: " TFMT "\n", - rqsttimer->beforeheader.tv_sec, - rqsttimer->beforeheader.tv_usec, - rqsttimer->afterheader.tv_sec, - rqsttimer->afterheader.tv_usec ); + rqsttimer->beforeheader.tv_sec, + rqsttimer->beforeheader.tv_usec, + rqsttimer->afterheader.tv_sec, + rqsttimer->afterheader.tv_usec ); D_PRINTF( "After body: " TFMT "\n", - rqsttimer->afterbody.tv_sec, - rqsttimer->afterbody.tv_usec ); + rqsttimer->afterbody.tv_sec, + rqsttimer->afterbody.tv_usec ); rqstat_times(&(rqststats), rqsttimer); rqstat_sum(&(timestat->rs), &(rqststats)); @@ -399,7 +399,7 @@ accumstats(rqst_timer_t *rqsttimer, page_stats_t *pagestats, stats_t *timestat) if (rqsttimer->page_number != 999) { - timestat->page_numbers[rqsttimer->page_number] += 1; + timestat->page_numbers[rqsttimer->page_number] += 1; } #undef TFMT @@ -411,7 +411,7 @@ accumstats(rqst_timer_t *rqsttimer, page_stats_t *pagestats, stats_t *timestat) * * maxcount = the number of files in the WWW page * pageval = the number of the WWW page (offset in load_file_list[]) - * (if -1, use page # 0 - does this still work?) + * (if -1, use page # 0 - does this still work?) * * returns the number of files retrieved */ @@ -426,7 +426,7 @@ makeload(int maxcount, int pageval, THREAD rqst_timer_t *timerarray, THREAD stat NETPORT loc_portnum; D_PRINTF( "Starting makeload(maxcount %d, pageval %d)\n", - maxcount, pageval ); + maxcount, pageval ); strcpy( server, webserver); /* Put in default value */ @@ -435,24 +435,24 @@ makeload(int maxcount, int pageval, THREAD rqst_timer_t *timerarray, THREAD stat for (cnt = 0; cnt < maxcount; cnt++) { - D_PRINTF( "Loop count %d in makeload()\n", cnt ); - if (pageval == -1) - { - pageval = cnt; - } - if (timeexpired) - { - break; - } - - /* check for a filename */ - if (strlen(load_file_list[pageval].filename[cnt]) < 1) - { - D_PRINTF( "Bad filename at pageval %d, count %d\n", - pageval, cnt ); - return(returnerr("Bad filename at pageval %d, count %d\n", - pageval, cnt)); - } + D_PRINTF( "Loop count %d in makeload()\n", cnt ); + if (pageval == -1) + { + pageval = cnt; + } + if (timeexpired) + { + break; + } + + /* check for a filename */ + if (strlen(load_file_list[pageval].filename[cnt]) < 1) + { + D_PRINTF( "Bad filename at pageval %d, count %d\n", + pageval, cnt ); + return(returnerr("Bad filename at pageval %d, count %d\n", + pageval, cnt)); + } /* if (load_file_list[pageval].port_number[cnt] != 0) { @@ -464,66 +464,66 @@ makeload(int maxcount, int pageval, THREAD rqst_timer_t *timerarray, THREAD stat } */ loc_portnum = portnum; if ((load_file_list[pageval].servername[cnt] != 0) - && - *load_file_list[pageval].servername[cnt]) - { - D_PRINTF( "Copying URL server %s to server\n", - load_file_list[pageval].servername[cnt] ); - strcpy(server, load_file_list[pageval].servername[cnt]); - } - - if (haveproxyserver) - { - D_PRINTF( "Copying proxy %s to webserver\n", proxyserver ); - strcpy(server, proxyserver); - } - - - D_PRINTF( "Calling get(%s, %d, %s, &(timearray[%d]))\n", - server, loc_portnum, load_file_list[pageval].filename[cnt], - cnt ); - - returnval = get(server, loc_portnum, - load_file_list[pageval].filename[cnt], - &(timerarray[cnt])); - if (returnval < 0) - { - D_PRINTF( "***GET() RETURNED AN ERROR\n" ); - } - - /* - * DID GET() RETURN A VALID TIME? - */ - if ((returnval == 0) && (timerarray[cnt].valid == 2)) - { - timerarray[cnt].page_number = pageval; - - accumstats(&timerarray[cnt], &page_stats_tmp, timestat); - } - else if (!timeexpired) /* INVALID, INCREMENT THE ERROR COUNTER */ - { - D_PRINTF( "GET error counter incremented\n" ); - timestat->rs.totalerrs++; - } - - if (amclient) { - fd_set readfds; - struct timeval timeout; - int rv; - - timeout.tv_sec = 0; - timeout.tv_usec = 0; - FD_ZERO(&readfds); - FD_SET(mastersock, &readfds); - - /* if the webmaster has aborted, quit */ - D_PRINTF("Before select() on webmaster socket\n"); - if (rv = select(FD_SETSIZE, &readfds, 0, 0, &timeout)) { - D_PRINTF("select() returned %d\n", rv); - D_PRINTF("Client terminating at request of webmaster\n"); - exit(2); - } - } + && + *load_file_list[pageval].servername[cnt]) + { + D_PRINTF( "Copying URL server %s to server\n", + load_file_list[pageval].servername[cnt] ); + strcpy(server, load_file_list[pageval].servername[cnt]); + } + + if (haveproxyserver) + { + D_PRINTF( "Copying proxy %s to webserver\n", proxyserver ); + strcpy(server, proxyserver); + } + + + D_PRINTF( "Calling get(%s, %d, %s, &(timearray[%d]))\n", + server, loc_portnum, load_file_list[pageval].filename[cnt], + cnt ); + + returnval = get(server, loc_portnum, + load_file_list[pageval].filename[cnt], + &(timerarray[cnt])); + if (returnval < 0) + { + D_PRINTF( "***GET() RETURNED AN ERROR\n" ); + } + + /* + * DID GET() RETURN A VALID TIME? + */ + if ((returnval == 0) && (timerarray[cnt].valid == 2)) + { + timerarray[cnt].page_number = pageval; + + accumstats(&timerarray[cnt], &page_stats_tmp, timestat); + } + else if (!timeexpired) /* INVALID, INCREMENT THE ERROR COUNTER */ + { + D_PRINTF( "GET error counter incremented\n" ); + timestat->rs.totalerrs++; + } + + if (amclient) { + fd_set readfds; + struct timeval timeout; + int rv; + + timeout.tv_sec = 0; + timeout.tv_usec = 0; + FD_ZERO(&readfds); + FD_SET(mastersock, &readfds); + + /* if the webmaster has aborted, quit */ + D_PRINTF("Before select() on webmaster socket\n"); + if (rv = select(FD_SETSIZE, &readfds, 0, 0, &timeout)) { + D_PRINTF("select() returned %d\n", rv); + D_PRINTF("Client terminating at request of webmaster\n"); + exit(2); + } + } } /* END for cnt */ @@ -532,28 +532,28 @@ makeload(int maxcount, int pageval, THREAD rqst_timer_t *timerarray, THREAD stat * WHY NOT USE returnval HERE? */ if ((returnval == 0) && - (cnt == load_file_list[pageval].num_of_files) && - (timerarray[cnt-1].valid == 2)) + (cnt == load_file_list[pageval].num_of_files) && + (timerarray[cnt-1].valid == 2)) { - rqst_stats_t *ps_rs; - rqst_stats_t *pst_rs; + rqst_stats_t *ps_rs; + rqst_stats_t *pst_rs; - ps_rs = &(page_stats[pageval].rs); - pst_rs = &(page_stats_tmp.rs); + ps_rs = &(page_stats[pageval].rs); + pst_rs = &(page_stats_tmp.rs); - rqstat_sum(ps_rs, pst_rs); + rqstat_sum(ps_rs, pst_rs); - page_stats[pageval].totalpages++; + page_stats[pageval].totalpages++; - if (page_stats[pageval].page_size == 0) - { - page_stats[pageval].page_size = (unsigned) - page_stats_tmp.rs.totalbody; - } + if (page_stats[pageval].page_size == 0) + { + page_stats[pageval].page_size = (unsigned) + page_stats_tmp.rs.totalbody; + } } D_PRINTF( "\nMakeload output page %d: %d errors, %d pages\n", - pageval, timestat->rs.totalerrs, page_stats[pageval].totalpages ); + pageval, timestat->rs.totalerrs, page_stats[pageval].totalpages ); D_PRINTF( "Makeload returning %d\n", cnt ); return(cnt); @@ -569,34 +569,34 @@ void sock_cleanup(void) { #endif /* WIN32 */ /* globalize variables that were in main() */ -long int numfiles = 0; -int testtime = 0; -int numloops = 0; -int numclients = 0; -int record_all_transactions = 0; -int uil_filelist_f = 0; /* filedescriptor of URLs to fetch? */ -int verbose = 0; +long int numfiles = 0; +int testtime = 0; +int numloops = 0; +int numclients = 0; +int record_all_transactions = 0; +int uil_filelist_f = 0; /* filedescriptor of URLs to fetch? */ +int verbose = 0; int total_weight; -char uil_filelist[NCCARGS]; -char filelist[MAXNUMOFFILES][MAXPATHLEN]; -char configfile[MAXPATHLEN]; -char connectstr[MAXHOSTNAMELEN+10]; +char uil_filelist[NCCARGS]; +char filelist[MAXNUMOFFILES][MAXPATHLEN]; +char configfile[MAXPATHLEN]; +char connectstr[MAXHOSTNAMELEN+10]; void ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { - int file_count=0; - int getoptch; - int currarg; - extern char *optarg; - extern int optind; - int i, j; - char *tempch; - int err; + int file_count=0; + int getoptch; + int currarg; + extern char *optarg; + extern int optind; + int i, j; + char *tempch; + int err; #define SLEEP_USEC 100 #ifdef WIN32 - WSADATA WSAData; + WSADATA WSAData; #else struct timeval sleeptime; @@ -611,13 +611,13 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[]) debugfile = stderr; #ifdef WIN32 - MessageBeep(~0U); /* announce our existence */ + MessageBeep(~0U); /* announce our existence */ MessageBeep(~0U); MessageBeep(~0U); err = WSAStartup(MAKEWORD(1,1), &WSAData); if (err != 0) { - errexit("Error in WSAStartup()\n"); + errexit("Error in WSAStartup()\n"); } atexit(sock_cleanup); @@ -628,7 +628,7 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[]) hSemaphore = CreateSemaphore(0, 0, 1, 0); if(hSemaphore == 0) { - errexit("Create semaphore failed: %d", GetLastError()); + errexit("Create semaphore failed: %d", GetLastError()); } #endif /* WIN32 */ @@ -645,51 +645,51 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[]) { switch(getoptch) { - case 'c': + case 'c': sprintf(connectstr, "%s", optarg); - amclient = 1; + amclient = 1; printf("%s", OKSTR); /* sent back to webmaster */ fflush(stdout); - break; + break; case 'd': debug = 0; /* sumedh */ break; - case 'f': - sprintf(configfile, "%s", optarg); - break; + case 'f': + sprintf(configfile, "%s", optarg); + break; case 'l': numloops = atoi(optarg); break; case 'n': numclients = atoi(optarg); break; - case 'u': - sprintf(uil_filelist, "%s", optarg); - uil_filelist_f = 1; - break; - case 'p': - portnum = atoi(optarg); - break; - case 's': - savefile = 1; - break; + case 'u': + sprintf(uil_filelist, "%s", optarg); + uil_filelist_f = 1; + break; + case 'p': + portnum = atoi(optarg); + break; + case 's': + savefile = 1; + break; case 't': testtime = 60 * atoi(optarg); break; - case 'v': - verbose = 1; - break; + case 'v': + verbose = 1; + break; case 'w': havewebserver = 1; sprintf(webserver,"%s",optarg); break; - case 'P': - haveproxyserver = 1; - sprintf(proxyserver, "%s", optarg); - break; - case 'R': - record_all_transactions = 1; - break; + case 'P': + haveproxyserver = 1; + sprintf(proxyserver, "%s", optarg); + break; + case 'R': + record_all_transactions = 1; + break; default: usage(argv[0]); } @@ -700,12 +700,12 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[]) /* print the command line */ for (i = 0; i < argc; i++) - D_PRINTF( "%s ", argv[i] ); + D_PRINTF( "%s ", argv[i] ); D_PRINTF( "\n\n" ); if(testtime && numloops) { - /* + /* * EITHER numloops OR testtime, BUT NOT BOTH. */ usage(argv[0]); @@ -720,9 +720,9 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[]) returnerr("No WWW Server specified\n"); usage(argv[0]); #else - /* IF IT ISN'T, WE ASSUME LOCALHOST */ - sprintf(webserver, "%s", "localhost"); - havewebserver = 1; + /* IF IT ISN'T, WE ASSUME LOCALHOST */ + sprintf(webserver, "%s", "localhost"); + havewebserver = 1; #endif /* WIN32 */ } @@ -734,8 +734,8 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[]) * GET THE URLS TO RETRIEVE. */ if (numfiles == MAXNUMOFFILES) { - returnerr("Maximum of %d files on the command line.\n"); - usage(argv[0]); + returnerr("Maximum of %d files on the command line.\n"); + usage(argv[0]); } sscanf(argv[currarg],"%s",filelist[numfiles]); numfiles++; @@ -744,8 +744,8 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[]) if ((numfiles != 0) && uil_filelist_f) { - returnerr("Both a filelist and UIL specified.\n"); - usage(argv[0]); + returnerr("Both a filelist and UIL specified.\n"); + usage(argv[0]); } if((numfiles == 0) && !(uil_filelist_f)) @@ -753,7 +753,7 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[]) /* * AT LEAST ONE FILE MUST BE SPECIFIED */ - returnerr("No UIL resources or filelist specified \n"); + returnerr("No UIL resources or filelist specified \n"); usage(argv[0]); } @@ -766,37 +766,37 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[]) } if(numclients > MAXPROCSPERNODE || numclients < 1) { - returnerr("Number of Clients must be between 1 and %d\n", MAXPROCSPERNODE); - exit(1); + returnerr("Number of Clients must be between 1 and %d\n", MAXPROCSPERNODE); + exit(1); } /* allow use of IP address */ if(amclient) { - if((tempch = strpbrk(connectstr,":")) == 0) - { - /* - * INCORRECT FORMAT OF ConnectStr. CORRECT FORMAT IS - * HOSTNAME:PORT OR HOST-IP:PORT - */ - D_PRINTF( "Incorrect format %s: use hostname:port or ip_addr:port\n", - connectstr ); - returnerr("Incorrect format %s: use host:port or ip_addr:port\n", connectstr); - exit(1); - } else { - strncpy(webmaster, connectstr, tempch-connectstr); - } - if(resolve_addrs(webmaster, "tcp", &webmast_phe, &webmast_ppe, &webmast_addr, &webmast_type)) - exit(1); + if((tempch = strpbrk(connectstr,":")) == 0) + { + /* + * INCORRECT FORMAT OF ConnectStr. CORRECT FORMAT IS + * HOSTNAME:PORT OR HOST-IP:PORT + */ + D_PRINTF( "Incorrect format %s: use hostname:port or ip_addr:port\n", + connectstr ); + returnerr("Incorrect format %s: use host:port or ip_addr:port\n", connectstr); + exit(1); + } else { + strncpy(webmaster, connectstr, tempch-connectstr); + } + if(resolve_addrs(webmaster, "tcp", &webmast_phe, &webmast_ppe, &webmast_addr, &webmast_type)) + exit(1); } if (haveproxyserver) { - D_PRINTF( "Copying proxy %s to webserver\n", proxyserver ); - strcpy(webserver, proxyserver); + D_PRINTF( "Copying proxy %s to webserver\n", proxyserver ); + strcpy(webserver, proxyserver); } if (resolve_addrs(webserver, "tcp", &webserv_phe, &webserv_ppe, &webserv_addr, &webserv_type)) - exit(1); + exit(1); /* * INITIALIZE DATA @@ -815,41 +815,41 @@ ACE_TMAIN(int argc, ACE_TCHAR *argv[]) /* IF WE HAVE A FILELIST, PARSE IT */ /* allocate memory */ D_PRINTF( "Allocating page list: %ld by %d\n", - number_of_pages, numfiles ); + number_of_pages, numfiles ); for (i=0; i= 0) - { - page_index++; - D_PRINTF( "Current page index %d: %ld - %d\n", - page_index, ran_number, - load_file_list[page_index].load_num - ); - ran_number -= load_file_list[page_index].load_num; - } - - if (page_index >= number_of_pages) { page_index--; } - - D_PRINTF( "Final page index %d\n", page_index ); - filecnt = makeload(load_file_list[page_index].num_of_files, - page_index, timerarray, ×tat, mastersock, page_stats); + ran_number = (rand_r(&junk) % total_weight); + D_PRINTF( "random %ld\n", ran_number ); + + /* loop through pages, find correct one + * while ran_number is positive, decrement it + * by the load_num of the current page + * example: ran_number is 5, pages have weights of 10 and 10 + * first iteration page_index = 0, ran_number = -5 + * iteration halted, page_index = 0 + */ + page_index = -1; + while (ran_number >= 0) + { + page_index++; + D_PRINTF( "Current page index %d: %ld - %d\n", + page_index, ran_number, + load_file_list[page_index].load_num + ); + ran_number -= load_file_list[page_index].load_num; + } + + if (page_index >= number_of_pages) { page_index--; } + + D_PRINTF( "Final page index %d\n", page_index ); + filecnt = makeload(load_file_list[page_index].num_of_files, + page_index, timerarray, ×tat, mastersock, page_stats); testtime = 1; - } - else /* NOT RUNNING IN TIMED MODE */ - { - for (page_number = 0; - page_number < number_of_pages; - page_number++) - { - filecnt = makeload(load_file_list[page_number].num_of_files, - page_number, timerarray, ×tat, mastersock, page_stats); - - } /* END for page_number */ - } /* END if/else TIMED MODE */ - } - else /* NO FILELIST */ - { - D_PRINTF( "No filelist\n" ); - /* - * LOOP THROUGH UNTIL numfiles TIMES OR UNTIL TIMER EXPIRES - * AND ALARM SETS filecnt TO INFINITY. - */ - - /* does this still work?? */ - /* filecnt = makeload(numfiles, -1, timerarray); */ - } /* END if HAVE FILELIST */ - - if (filecnt > 0) - file_count += filecnt; + } + else /* NOT RUNNING IN TIMED MODE */ + { + for (page_number = 0; + page_number < number_of_pages; + page_number++) + { + filecnt = makeload(load_file_list[page_number].num_of_files, + page_number, timerarray, ×tat, mastersock, page_stats); + + } /* END for page_number */ + } /* END if/else TIMED MODE */ + } + else /* NO FILELIST */ + { + D_PRINTF( "No filelist\n" ); + /* + * LOOP THROUGH UNTIL numfiles TIMES OR UNTIL TIMER EXPIRES + * AND ALARM SETS filecnt TO INFINITY. + */ + + /* does this still work?? */ + /* filecnt = makeload(numfiles, -1, timerarray); */ + } /* END if HAVE FILELIST */ + + if (filecnt > 0) + file_count += filecnt; } /* END while loopcnt */ @@ -1138,157 +1138,157 @@ void ClientThread(void *dummy) if (testtime == 0) { - numfiles = loopcnt; + numfiles = loopcnt; - if (uil_filelist_f) - { - numfiles = file_count; - } + if (uil_filelist_f) + { + numfiles = file_count; + } } /* This option ( "-R" ) looks broken (e.g. l > 50) -- JEF 2/15/96 */ if (record_all_transactions) { - /* - * DUMP THE LOG FILE INFORMATION. - */ - for (loop=0; loop < (loopcnt * file_count); loop++) - { - fprintf(logfile, " entertime \t%d.%d\n" - " beforeconnect \t%d.%d\n" - " afterconnect \t%d.%d\n" - " beforeheader \t%d.%d\n" - " afterheader \t%d.%d\n" - " afterbody \t%d.%d\n" - " exittime \t%d.%d\n" - " total bytes \t%d\n" - " body bytes\t%d\n", - timerarray[loop].entertime.tv_sec, - timerarray[loop].entertime.tv_usec, - timerarray[loop].beforeconnect.tv_sec, - timerarray[loop].beforeconnect.tv_usec, - timerarray[loop].afterconnect.tv_sec, - timerarray[loop].afterconnect.tv_usec, - timerarray[loop].beforeheader.tv_sec, - timerarray[loop].beforeheader.tv_usec, - timerarray[loop].afterheader.tv_sec, - timerarray[loop].afterheader.tv_usec, - timerarray[loop].afterbody.tv_sec, - timerarray[loop].afterbody.tv_usec, - timerarray[loop].exittime.tv_sec, - timerarray[loop].exittime.tv_usec, - timerarray[loop].totalbytes, - timerarray[loop].bodybytes); - } /* end for loop */ + /* + * DUMP THE LOG FILE INFORMATION. + */ + for (loop=0; loop < (loopcnt * file_count); loop++) + { + fprintf(logfile, " entertime \t%d.%d\n" + " beforeconnect \t%d.%d\n" + " afterconnect \t%d.%d\n" + " beforeheader \t%d.%d\n" + " afterheader \t%d.%d\n" + " afterbody \t%d.%d\n" + " exittime \t%d.%d\n" + " total bytes \t%d\n" + " body bytes\t%d\n", + timerarray[loop].entertime.tv_sec, + timerarray[loop].entertime.tv_usec, + timerarray[loop].beforeconnect.tv_sec, + timerarray[loop].beforeconnect.tv_usec, + timerarray[loop].afterconnect.tv_sec, + timerarray[loop].afterconnect.tv_usec, + timerarray[loop].beforeheader.tv_sec, + timerarray[loop].beforeheader.tv_usec, + timerarray[loop].afterheader.tv_sec, + timerarray[loop].afterheader.tv_usec, + timerarray[loop].afterbody.tv_sec, + timerarray[loop].afterbody.tv_usec, + timerarray[loop].exittime.tv_sec, + timerarray[loop].exittime.tv_usec, + timerarray[loop].totalbytes, + timerarray[loop].bodybytes); + } /* end for loop */ } /* end if recording all transactions */ D_PRINTF( "total errors: %d\n",timestat.rs.totalerrs ); /* gethostname(timestat.hostname,MAXHOSTNAMELEN); */ /* D_PRINTF( "Test for host: %s\n",timestat.hostname ); */ D_PRINTF( "Server is: %s running at port number: %d\n", - webserver,portnum ); + webserver,portnum ); /* sprintf(timestat.hostname,"%s:%d",timestat.hostname,getpid()); */ if (amclient) /* CLIENT TO A WEBMASTER */ { - char *stats_as_text; + char *stats_as_text; /* * SEND THE TIMING DATA TO THE MASTER */ - stats_as_text = stats_to_text(×tat); - D_PRINTF( "stats_to_text returned %s\n", stats_as_text ); - - returnval = senddata(mastersock, stats_as_text, - SIZEOF_STATSTEXTBASE + number_of_pages*SIZEOF_DOUBLETEXT); - D_PRINTF( "Wrote time stats to master %d\n", returnval ); - - if (returnval < 1) - { - D_PRINTF( "Error while writing time stats: %s\n", - neterrstr() ); - errexit("Error while writing time stats: %s\n", - neterrstr()); - } - - if (uil_filelist_f) - /* write pagestats */ - { - char *page_stats_as_text; - for (i = 0; i < number_of_pages; i++) - { - D_PRINTF( "On page_stats[%d]\n", i ); - page_stats_as_text = page_stats_to_text(&page_stats[i]); - returnval = strlen(page_stats_as_text); - D_PRINTF( "page_stats_to_text[%d] returned %d\n", - i, returnval ); - returnval = senddata(mastersock, page_stats_as_text, - SIZEOF_PAGESTATSTEXT); - if (returnval < 1) - { - D_PRINTF( "Error while writing page_stats[%d]: %s\n", - i, neterrstr() ); - errexit("Error while writing page_stats[%d]: %s\n", - i, neterrstr()); - } /* end if */ - D_PRINTF( "Wrote %d bytes of page_stats[%d] to master\n", - returnval, i ); - } /* end for */ - } /* end if filelist */ - - D_PRINTF( "About to close socket\n" ); + stats_as_text = stats_to_text(×tat); + D_PRINTF( "stats_to_text returned %s\n", stats_as_text ); + + returnval = senddata(mastersock, stats_as_text, + SIZEOF_STATSTEXTBASE + number_of_pages*SIZEOF_DOUBLETEXT); + D_PRINTF( "Wrote time stats to master %d\n", returnval ); + + if (returnval < 1) + { + D_PRINTF( "Error while writing time stats: %s\n", + neterrstr() ); + errexit("Error while writing time stats: %s\n", + neterrstr()); + } + + if (uil_filelist_f) + /* write pagestats */ + { + char *page_stats_as_text; + for (i = 0; i < number_of_pages; i++) + { + D_PRINTF( "On page_stats[%d]\n", i ); + page_stats_as_text = page_stats_to_text(&page_stats[i]); + returnval = strlen(page_stats_as_text); + D_PRINTF( "page_stats_to_text[%d] returned %d\n", + i, returnval ); + returnval = senddata(mastersock, page_stats_as_text, + SIZEOF_PAGESTATSTEXT); + if (returnval < 1) + { + D_PRINTF( "Error while writing page_stats[%d]: %s\n", + i, neterrstr() ); + errexit("Error while writing page_stats[%d]: %s\n", + i, neterrstr()); + } /* end if */ + D_PRINTF( "Wrote %d bytes of page_stats[%d] to master\n", + returnval, i ); + } /* end for */ + } /* end if filelist */ + + D_PRINTF( "About to close socket\n" ); if (NETCLOSE(mastersock)) - D_PRINTF( "Close socket error: %s\n", neterrstr() ); + D_PRINTF( "Close socket error: %s\n", neterrstr() ); } else /* NOT A CLIENT TO A WEBMASTER */ { - if (testtime) - { - printf("Test ran for: %d minutes\n",(testtime/60)); - } - else - { - printf("Test ran for: %d iterations.\n",numloops); - } - compdifftime(&(timestat.endtime), &(timestat.starttime), - &(runningtime)); - printf("Total time of test (sec) %d.%d\n", runningtime.tv_sec, - runningtime.tv_usec); - printf("Files retrieved per iteration: %d\n",numfiles); /* 'per iteration' */ - printf("----------------------------------\n"); - printf("Totals:\n\n"); - rqstat_print(&(timestat.rs)); - - if (timestat.rs.totalconnects == 0) - goto end; - printf("Thruput = %5.2lf Kbytes/sec\n", - thruputpersec(timestat.rs.totalbytes, &runningtime) / 1000); - - if (uil_filelist_f && numloops && verbose) - { - for (loop = 0; loop < number_of_pages; loop++) - { - if (timestat.page_numbers[loop] != 0) - { - printf ("===============================================================================\n"); - printf ("Page # %d\n\n", loop); - printf ("Total number of times page was hit %d\n", - page_stats[loop].totalpages); - rqstat_print(&(page_stats[loop].rs)); - printf ("Page size %d \n", page_stats[loop].page_size); - printf ("===============================================================================\n\n"); - } /* END if timestat */ - } /* END for loop */ - } /* END if filelist */ + if (testtime) + { + printf("Test ran for: %d minutes\n",(testtime/60)); + } + else + { + printf("Test ran for: %d iterations.\n",numloops); + } + compdifftime(&(timestat.endtime), &(timestat.starttime), + &(runningtime)); + printf("Total time of test (sec) %d.%d\n", runningtime.tv_sec, + runningtime.tv_usec); + printf("Files retrieved per iteration: %d\n",numfiles); /* 'per iteration' */ + printf("----------------------------------\n"); + printf("Totals:\n\n"); + rqstat_print(&(timestat.rs)); + + if (timestat.rs.totalconnects == 0) + goto end; + printf("Thruput = %5.2lf Kbytes/sec\n", + thruputpersec(timestat.rs.totalbytes, &runningtime) / 1000); + + if (uil_filelist_f && numloops && verbose) + { + for (loop = 0; loop < number_of_pages; loop++) + { + if (timestat.page_numbers[loop] != 0) + { + printf ("===============================================================================\n"); + printf ("Page # %d\n\n", loop); + printf ("Total number of times page was hit %d\n", + page_stats[loop].totalpages); + rqstat_print(&(page_stats[loop].rs)); + printf ("Page size %d \n", page_stats[loop].page_size); + printf ("===============================================================================\n\n"); + } /* END if timestat */ + } /* END for loop */ + } /* END if filelist */ } /* END if client */ end: if(record_all_transactions) - fclose(logfile); + fclose(logfile); if(debug) { - D_PRINTF( "Client exiting.\n" ); - fclose(debugfile); + D_PRINTF( "Client exiting.\n" ); + fclose(debugfile); } #ifdef WIN32 diff --git a/ACE/apps/JAWS/clients/WebSTONE/src/webmaster.c b/ACE/apps/JAWS/clients/WebSTONE/src/webmaster.c index 1bfbcc06b9d..3acc9e28b16 100644 --- a/ACE/apps/JAWS/clients/WebSTONE/src/webmaster.c +++ b/ACE/apps/JAWS/clients/WebSTONE/src/webmaster.c @@ -1,13 +1,13 @@ /* $Id$ */ /************************************************************************** - * * - * Copyright (C) 1995 Silicon Graphics, Inc. * - * * - * These coded instructions, statements, and computer programs were * + * * + * Copyright (C) 1995 Silicon Graphics, Inc. * + * * + * These coded instructions, statements, and computer programs were * * developed by SGI for public use. If any changes are made to this code* * please try to get the changes back to the author. Feel free to make * - * modifications and changes to the code and release it. * - * * + * modifications and changes to the code and release it. * + * * **************************************************************************/ /* FUZZ: disable check_for_math_include */ @@ -35,8 +35,8 @@ #include #include #else -#define FD_SETSIZE 1024 /* max size for select() - keep before - * and same size as MAXCLIENTS */ +#define FD_SETSIZE 1024 /* max size for select() - keep before + * and same size as MAXCLIENTS */ #include #include #include @@ -47,38 +47,38 @@ #include "bench.h" /* command line options/data */ -int savefile = 0; -int debug = 0; -int norexec = 0; -int haveproxyserver = 0; -char proxyserver[MAXHOSTNAMELEN]; -char network_mask_str[30] = "255.255.255.0"; +int savefile = 0; +int debug = 0; +int norexec = 0; +int haveproxyserver = 0; +char proxyserver[MAXHOSTNAMELEN]; +char network_mask_str[30] = "255.255.255.0"; unsigned network_mask = 0; -int servaddrin_config = 0; -int dumpall = 0; -int testtime = 0; -int havewebserver = 0; -int numloops = 0; -NETPORT portnum = 0; -int redirect = 0; -int record_all_transactions = 0; -int uil_filelist_f = 0; -int verbose = 0; -char webserver[MAXHOSTNAMELEN]; -char configfile[MAXPATHLEN]; -char uil_filelist[NCCARGS]; - -char filelist[256][MAXPATHLEN]; -fd_set zerofdset; +int servaddrin_config = 0; +int dumpall = 0; +int testtime = 0; +int havewebserver = 0; +int numloops = 0; +NETPORT portnum = 0; +int redirect = 0; +int record_all_transactions = 0; +int uil_filelist_f = 0; +int verbose = 0; +char webserver[MAXHOSTNAMELEN]; +char configfile[MAXPATHLEN]; +char uil_filelist[NCCARGS]; + +char filelist[256][MAXPATHLEN]; +fd_set zerofdset; /* other key data */ long int number_of_pages = 0; -int totalnumclients = 0; -int num_rexecs = 0; -SOCKET socknum[MAXCLIENTS]; -SOCKET sockIO[MAXTOTALPROCS]; -SOCKET sockErr[MAXTOTALPROCS]; -THREAD FILE *debugfile = stderr; +int totalnumclients = 0; +int num_rexecs = 0; +SOCKET socknum[MAXCLIENTS]; +SOCKET sockIO[MAXTOTALPROCS]; +SOCKET sockErr[MAXTOTALPROCS]; +THREAD FILE *debugfile = stderr; struct hostent *master_phe; /* IP addresses for webmaster */ struct timeval sumedh_start, sumedh_end; @@ -88,10 +88,10 @@ static void usage(const char *progname) { - fprintf(stderr, "Usage: %s [-a] [-d] -f config_file [-l numloops]\n", - progname); - fprintf(stderr, " [-p port_num] [-r] [-s] [-t run_time] \n"); - fprintf(stderr, "\n"); + fprintf(stderr, "Usage: %s [-a] [-d] -f config_file [-l numloops]\n", + progname); + fprintf(stderr, " [-p port_num] [-r] [-s] [-t run_time] \n"); + fprintf(stderr, "\n"); fprintf(stderr, "-w webserver URL [URL ...]\n\n"); fprintf(stderr, "-a print timing information for all clients\n"); fprintf(stderr, "-d turn on debug statements\n"); @@ -102,12 +102,12 @@ usage(const char *progname) fprintf(stderr, "-s save client gets to /tmp/webstone.data.*\n"); fprintf(stderr, "-t run_time\tduration of test in minutes\n"); fprintf(stderr, "-w webserver\tname of webserver host to contact\n"); - fprintf(stderr, "-u URL file\tfilelist of URLs\n"); - fprintf(stderr, "-v verbose mode\n"); - fprintf(stderr, "-P servername\tuse proxy server for transactions\n"); - fprintf(stderr, "-W webserver addresses are in the config file\n"); - fprintf(stderr, "-R record all transactions\n"); - errexit("\n"); + fprintf(stderr, "-u URL file\tfilelist of URLs\n"); + fprintf(stderr, "-v verbose mode\n"); + fprintf(stderr, "-P servername\tuse proxy server for transactions\n"); + fprintf(stderr, "-W webserver addresses are in the config file\n"); + fprintf(stderr, "-R record all transactions\n"); + errexit("\n"); } static SOCKET @@ -143,12 +143,12 @@ passivesock(const NETPORT portnum, const char *protocol, const int qlen) if (strcmp(protocol, "udp") == 0) { type = SOCK_DGRAM; - D_PRINTF( "Choosing SOCK_DGRAM\n" ); + D_PRINTF( "Choosing SOCK_DGRAM\n" ); } else { type = SOCK_STREAM; - D_PRINTF( "Choosing SOCK_STREAM, errno %d\n",errno ); + D_PRINTF( "Choosing SOCK_STREAM, errno %d\n",errno ); } /* allocate a socket */ @@ -156,10 +156,10 @@ passivesock(const NETPORT portnum, const char *protocol, const int qlen) if (BADSOCKET(s)) { D_PRINTF( "Socket PF_INET %d %d returned %d with %s\n", - type, ppe->p_proto, s, neterrstr() ); + type, ppe->p_proto, s, neterrstr() ); errexit("Can't create socket: %s\n", neterrstr()); } - D_PRINTF( "Socket %d created with errno %d\n",s,errno ); + D_PRINTF( "Socket %d created with errno %d\n",s,errno ); /* Bind the socket */ if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) @@ -216,48 +216,48 @@ void echo_client(void *stream) timeout.tv_usec = (long)0; if (which_stream) { - sockarr = sockIO; - outfile = stdout; + sockarr = sockIO; + outfile = stdout; } else { - sockarr = sockErr; - outfile = stderr; + sockarr = sockErr; + outfile = stderr; } D_PRINTF( "echo_client running\n" ); signal( SIGINT, SIG_DFL); /* restore default behavior - for SIGINT */ + for SIGINT */ while (1) { - FD_ZERO(&readfds); - for (i = 0; i < num_rexecs; i++) - if (sockarr[i] != BADSOCKET_VALUE) - FD_SET(sockarr[i], &readfds); - rv = select(num_rexecs, &readfds, 0, 0, &timeout); - if ( rv == 0) - continue; - if (rv < 0 && WSAGetLastError() == WSANOTINITIALISED) - return; - if (rv < 0) - errexit("Error in echo_client(): select() returns %d: %s\n", rv, neterrstr()); - - /* loop over the sockets that are ready with data */ - for (i = 0; i < num_rexecs; i++) { - if (sockarr[i] != BADSOCKET_VALUE && FD_ISSET(sockarr[i], &readfds)) { - len = NETREAD(sockarr[i], buf, sizeof(buf)); - if (len <= 0) { - /* mark connection closed */ - sockarr[i] = BADSOCKET_VALUE; - if (len < 0 && WSAGetLastError() == WSANOTINITIALISED) - return; - if (len < 0) - fprintf(stderr, "Error in echo_client() after NETREAD(): %s\n", neterrstr()); - continue; - } + FD_ZERO(&readfds); + for (i = 0; i < num_rexecs; i++) + if (sockarr[i] != BADSOCKET_VALUE) + FD_SET(sockarr[i], &readfds); + rv = select(num_rexecs, &readfds, 0, 0, &timeout); + if ( rv == 0) + continue; + if (rv < 0 && WSAGetLastError() == WSANOTINITIALISED) + return; + if (rv < 0) + errexit("Error in echo_client(): select() returns %d: %s\n", rv, neterrstr()); - /* copy to stdout or stderr */ - fwrite(buf, sizeof(char), len, outfile); - } - } + /* loop over the sockets that are ready with data */ + for (i = 0; i < num_rexecs; i++) { + if (sockarr[i] != BADSOCKET_VALUE && FD_ISSET(sockarr[i], &readfds)) { + len = NETREAD(sockarr[i], buf, sizeof(buf)); + if (len <= 0) { + /* mark connection closed */ + sockarr[i] = BADSOCKET_VALUE; + if (len < 0 && WSAGetLastError() == WSANOTINITIALISED) + return; + if (len < 0) + fprintf(stderr, "Error in echo_client() after NETREAD(): %s\n", neterrstr()); + continue; + } + + /* copy to stdout or stderr */ + fwrite(buf, sizeof(char), len, outfile); + } + } } D_PRINTF( "Exiting echo_client\n" ); } @@ -278,7 +278,7 @@ echo_client(char *hostname, const int fd) cc = NETREAD(fd, buf, sizeof(buf)); if (cc > 0) { - write(STDOUT_FILENO, buf, cc); + write(STDOUT_FILENO, buf, cc); } } D_PRINTF( "Exiting echo_client\n" ); @@ -292,31 +292,31 @@ echo_client(char *hostname, const int fd) * return value is a string with the IP address or hostname (or NULL) */ char *pick_webmaster_IP_address(char *client_hostname, struct hostent *master_phe, - unsigned netmask) { + unsigned netmask) { static char buf[20]; unsigned char addr[4]; int client_addr; int i; if (client_hostname[0] >= '0' && client_hostname[0] <= '9') { - /* we have an IP address */ - client_addr = inet_addr(client_hostname); - if (client_addr == INADDR_NONE) - return 0; + /* we have an IP address */ + client_addr = inet_addr(client_hostname); + if (client_addr == INADDR_NONE) + return 0; } else { - /* we have a hostname, use the webserver hostname */ - return master_phe->h_name; + /* we have a hostname, use the webserver hostname */ + return master_phe->h_name; } for (i = 0; master_phe->h_addr_list[i] != 0; i++) { - if ((*(int *)(master_phe->h_addr_list[i]) & netmask) == - (client_addr & netmask)) - goto gotit; + if ((*(int *)(master_phe->h_addr_list[i]) & netmask) == + (client_addr & netmask)) + goto gotit; } i = 0; /* give up */ gotit: - memcpy((char *)addr, master_phe->h_addr_list[i], sizeof(addr)); /* Internet specific */ + memcpy((char *)addr, master_phe->h_addr_list[i], sizeof(addr)); /* Internet specific */ sprintf(buf, "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]); return buf; } @@ -327,10 +327,10 @@ gotit: void ParseCmdLine(int argc, char **argv ) { -char getoptch; -int currarg; -extern char *optarg; -extern int optind; +char getoptch; +int currarg; +extern char *optarg; +extern int optind; /* * PARSE THE COMMAND LINE OPTIONS @@ -338,89 +338,89 @@ extern int optind; while((getoptch = getopt(argc,argv,"P:f:t:l:p:u:R:w:n:M:adrsvWX")) != (const char)EOF) { switch(getoptch) - { - case 'M': - strcpy(network_mask_str, optarg); - break; - case 'P': - haveproxyserver = 1; - strcpy(proxyserver, optarg); - break; - case 'R': - record_all_transactions = 1; - break; - case 'X': - norexec = 1; - break; - case 'W': - servaddrin_config = 1; - break; - case 'a': - dumpall = 1; - break; - case 'd': - debug = 1; - break; - case 'f': - strcpy(configfile, optarg); - break; - case 'l': - numloops = atoi(optarg); - break; - case 'p': - portnum = atoi(optarg); - break; - case 'r': - redirect = 1; - break; - case 's': - savefile = 1; - break; - case 't': - testtime = atoi(optarg); - break; - case 'u': - uil_filelist_f = 1; - strcpy(uil_filelist, optarg); - break; - case 'v': - verbose = 1; - break; - case 'w': - havewebserver = 1; - strcpy(webserver, optarg); - break; - default: - usage(argv[0]); - } /* end switch */ + { + case 'M': + strcpy(network_mask_str, optarg); + break; + case 'P': + haveproxyserver = 1; + strcpy(proxyserver, optarg); + break; + case 'R': + record_all_transactions = 1; + break; + case 'X': + norexec = 1; + break; + case 'W': + servaddrin_config = 1; + break; + case 'a': + dumpall = 1; + break; + case 'd': + debug = 1; + break; + case 'f': + strcpy(configfile, optarg); + break; + case 'l': + numloops = atoi(optarg); + break; + case 'p': + portnum = atoi(optarg); + break; + case 'r': + redirect = 1; + break; + case 's': + savefile = 1; + break; + case 't': + testtime = atoi(optarg); + break; + case 'u': + uil_filelist_f = 1; + strcpy(uil_filelist, optarg); + break; + case 'v': + verbose = 1; + break; + case 'w': + havewebserver = 1; + strcpy(webserver, optarg); + break; + default: + usage(argv[0]); + } /* end switch */ } /* end while */ if (numloops && testtime) - errexit("Can't have both -l and -t\n"); + errexit("Can't have both -l and -t\n"); if(!havewebserver && !servaddrin_config) { /* * THE SERVERS NAME MUST BE SPECIFIED */ - + fprintf(stderr,"No WWW Server specified\n"); usage(argv[0]); } if (havewebserver && servaddrin_config) { - /* - * CAN'T HAVE BOTH -w and -W - */ - fprintf(stderr, "Can't have both -w and -W options\n"); - usage(argv[0]); + /* + * CAN'T HAVE BOTH -w and -W + */ + fprintf(stderr, "Can't have both -w and -W options\n"); + usage(argv[0]); } network_mask = inet_addr(network_mask_str); if (network_mask == INADDR_NONE) { - fprintf(stderr, "Invalid network mask (-M %s)\n", network_mask_str); - usage(argv[0]); + fprintf(stderr, "Invalid network mask (-M %s)\n", network_mask_str); + usage(argv[0]); } if(strlen(configfile) == 0) @@ -436,32 +436,32 @@ extern int optind; */ if (uil_filelist_f == 0) { - currarg = optind; - number_of_pages = 0; - while(currarg != argc) - { - /* - * GET THE UILS TO RETRIEVE. - */ - - sscanf(argv[currarg],"%s",filelist[number_of_pages]); - number_of_pages++; - currarg++; - } + currarg = optind; + number_of_pages = 0; + while(currarg != argc) + { + /* + * GET THE UILS TO RETRIEVE. + */ + + sscanf(argv[currarg],"%s",filelist[number_of_pages]); + number_of_pages++; + currarg++; + } } else { - /* have filelist; take a stab at the number of valid URLs */ - D_PRINTF( "About to parse filelist %s\n", uil_filelist ); - number_of_pages = count_file_list(uil_filelist); + /* have filelist; take a stab at the number of valid URLs */ + D_PRINTF( "About to parse filelist %s\n", uil_filelist ); + number_of_pages = count_file_list(uil_filelist); } if (number_of_pages == 0) { /* - * AT LEAST ONE FILE MUST BE SPECIFIED - */ - fprintf(stderr,"No URL resources specified\n"); - usage(argv[0]); + * AT LEAST ONE FILE MUST BE SPECIFIED + */ + fprintf(stderr,"No URL resources specified\n"); + usage(argv[0]); } } @@ -487,14 +487,14 @@ struct sockaddr_in *serveraddr; { errexit("Couldn't open socket %d: %s\n", sock, neterrstr()); } - D_PRINTF( "The passivesock call succeeded\n" ); + D_PRINTF( "The passivesock call succeeded\n" ); D_PRINTF( "calling getsockname\n" ); len = sizeof(struct sockaddr); if(getsockname(sock, (struct sockaddr *)serveraddr, &len) < 0) { - errexit("Could not get socket informaton\n"); + errexit("Could not get socket informaton\n"); } return( sock ); @@ -520,26 +520,26 @@ char *commandline; if(gethostname(hostname,MAXHOSTNAMELEN) != 0) { - errexit("Could not retrieve local host name"); + errexit("Could not retrieve local host name"); } else { - /* convert hostname to address (to avoid DNS problems for webclients) */ - /* The following lines are add to copy the system - buffer (output of gethostbyname()) into user area. + /* convert hostname to address (to avoid DNS problems for webclients) */ + /* The following lines are add to copy the system + buffer (output of gethostbyname()) into user area. This is because, there are very good chances that later - on system buffer might be overwritten by some calls and - still if your pointer is pointing to same addr. nothing - but only trouble and trouble! Infact this is what + on system buffer might be overwritten by some calls and + still if your pointer is pointing to same addr. nothing + but only trouble and trouble! Infact this is what happening when I tried to run webstone benchmark for more then one clients. It used to over write the webmaster name - with the first client name and so remaining on client(s) - the webclient process(es) were invoked with wrong webmaster - name! This behaviour is observed Solaris 2.4 this bug - can be hit in any OS. - Rajesh Shah 5/18/96 */ - - /* master_phe = gethostbyname(hostname); */ - master_phe_tmp = gethostbyname(hostname); - master_phe = (struct hostent *)malloc(sizeof(struct hostent)); - HostEntCpy(master_phe, master_phe_tmp); + with the first client name and so remaining on client(s) + the webclient process(es) were invoked with wrong webmaster + name! This behaviour is observed Solaris 2.4 this bug + can be hit in any OS. - Rajesh Shah 5/18/96 */ + + /* master_phe = gethostbyname(hostname); */ + master_phe_tmp = gethostbyname(hostname); + master_phe = (struct hostent *)malloc(sizeof(struct hostent)); + HostEntCpy(master_phe, master_phe_tmp); } /* set up executable pathname */ @@ -548,7 +548,7 @@ char *commandline; if ( temp && *temp ) { webclient_path = (char *)mymalloc( strlen(temp) + strlen("/webclient") - + 1); + + 1); strcpy(webclient_path, temp); strcat(webclient_path, "/webclient"); @@ -593,11 +593,11 @@ char *commandline; if (uil_filelist_f) { strcat(commandline," -u "); - strcat(commandline,uil_filelist); + strcat(commandline,uil_filelist); } if (record_all_transactions) { - strcat(commandline," -R"); + strcat(commandline," -R"); } if (testtime != 0) { @@ -613,16 +613,16 @@ char *commandline; if (uil_filelist_f == 0) { - cnt = 0; - while(cnt < number_of_pages) - { - /* - * PUT THE FILES AT THE END OF THE LIST. - */ - strcat(commandline," "); - strcat(commandline,filelist[cnt]); - cnt++; - } + cnt = 0; + while(cnt < number_of_pages) + { + /* + * PUT THE FILES AT THE END OF THE LIST. + */ + strcat(commandline," "); + strcat(commandline,filelist[cnt]); + cnt++; + } } puts(commandline); } @@ -632,21 +632,21 @@ char *commandline; */ int RexecClients( commandline, clienthostname, serveraddr) char *commandline; -char clienthostname[MAXCLIENTS][MAXHOSTNAMELEN]; -struct sockaddr_in *serveraddr; +char clienthostname[MAXCLIENTS][MAXHOSTNAMELEN]; +struct sockaddr_in *serveraddr; { - int tmpfd; - int numclients = 0; - char tmpcommandline[NCCARGS]; + int tmpfd; + int numclients = 0; + char tmpcommandline[NCCARGS]; struct servent *inetport; - int cnt; - char buffer[NCCARGS]; - char login[MAXUSERNAME]; - char password[MAXPASSWD]; - FILE *fp; - int returnval; - char *tmphostname; + int cnt; + char buffer[NCCARGS]; + char login[MAXUSERNAME]; + char password[MAXPASSWD]; + FILE *fp; + int returnval; + char *tmphostname; memset(buffer, 0, sizeof(buffer)); @@ -671,84 +671,84 @@ struct sockaddr_in *serveraddr; D_PRINTF( "rexec loop\n" ); while(1) { - char webserver2[MAXHOSTNAMELEN]; - char linebuf[150]; - int num; - char *primename; - - if (0 == fgets(linebuf, sizeof(linebuf), fp)) - break; - num = sscanf(linebuf,"%s %s %s %d %s",clienthostname[cnt],login,password, - &numclients, webserver2); - if (num < 4) - break; - if (servaddrin_config) { - if (num == 4) { - errexit("No webserver specified in config file for %s\n", clienthostname[cnt]); - } - strcpy(webserver, webserver2); - } - - if (numclients <= 0) - errexit("Number of clients must be >= 0\n"); - if (numclients > MAXPROCSPERNODE) - { - errexit("Number of clients per node can't exceed %d\n", MAXPROCSPERNODE); - } + char webserver2[MAXHOSTNAMELEN]; + char linebuf[150]; + int num; + char *primename; + + if (0 == fgets(linebuf, sizeof(linebuf), fp)) + break; + num = sscanf(linebuf,"%s %s %s %d %s",clienthostname[cnt],login,password, + &numclients, webserver2); + if (num < 4) + break; + if (servaddrin_config) { + if (num == 4) { + errexit("No webserver specified in config file for %s\n", clienthostname[cnt]); + } + strcpy(webserver, webserver2); + } + + if (numclients <= 0) + errexit("Number of clients must be >= 0\n"); + if (numclients > MAXPROCSPERNODE) + { + errexit("Number of clients per node can't exceed %d\n", MAXPROCSPERNODE); + } totalnumclients += numclients; - primename = pick_webmaster_IP_address(clienthostname[cnt], master_phe, network_mask); - if (primename == 0) { - errexit("Bad client address %s for Client %d\n", clienthostname[cnt], cnt); - } + primename = pick_webmaster_IP_address(clienthostname[cnt], master_phe, network_mask); + if (primename == 0) { + errexit("Bad client address %s for Client %d\n", clienthostname[cnt], cnt); + } fprintf(stdout,"Client %d: %s \t# Processes: %d\n Webserver: %s\tWebmaster: %s:%d\n", - cnt, clienthostname[cnt], numclients, webserver, primename, - ntohs(serveraddr->sin_port)); - fflush(stdout); + cnt, clienthostname[cnt], numclients, webserver, primename, + ntohs(serveraddr->sin_port)); + fflush(stdout); sprintf(tmpcommandline, commandline, numclients, webserver, primename, - ntohs(serveraddr->sin_port)); + ntohs(serveraddr->sin_port)); fprintf(stderr, "tmpcommandline: %s\n", tmpcommandline); - D_PRINTF( "%s rexec %s\n",&clienthostname[cnt],tmpcommandline ); - if (norexec) { - sleep(30); /* gives some time to start clients for debugging */ - } else { - - tmphostname = &(clienthostname[cnt][0]); - tmpfd = rexec(&tmphostname, inetport->s_port, login, password, - tmpcommandline, &sockErr[cnt]); - if((sockIO[cnt] = tmpfd) < 0) - { - errexit("Could not rexec: rexec to client %s, cmdline %s failed\n", - clienthostname[cnt],tmpcommandline); - } - } - - - returnval = NETREAD(tmpfd, buffer, OKSTRLEN); - D_PRINTF( "read returns %d, %s\n", returnval, buffer ); - - if (returnval <= 0 || memcmp(buffer, OKSTR, OKSTRLEN) != 0) - { + D_PRINTF( "%s rexec %s\n",&clienthostname[cnt],tmpcommandline ); + if (norexec) { + sleep(30); /* gives some time to start clients for debugging */ + } else { + + tmphostname = &(clienthostname[cnt][0]); + tmpfd = rexec(&tmphostname, inetport->s_port, login, password, + tmpcommandline, &sockErr[cnt]); + if((sockIO[cnt] = tmpfd) < 0) + { + errexit("Could not rexec: rexec to client %s, cmdline %s failed\n", + clienthostname[cnt],tmpcommandline); + } + } + + + returnval = NETREAD(tmpfd, buffer, OKSTRLEN); + D_PRINTF( "read returns %d, %s\n", returnval, buffer ); + + if (returnval <= 0 || memcmp(buffer, OKSTR, OKSTRLEN) != 0) + { errexit("rexec to client %s, cmdline %s received error %s\n", - clienthostname[cnt],tmpcommandline, buffer); - } + clienthostname[cnt],tmpcommandline, buffer); + } - cnt++; - if (cnt > MAXCLIENTS || cnt > FD_SETSIZE) - { - errexit("Number of Clients can't exceed %d\n", MAXCLIENTS); - } + cnt++; + if (cnt > MAXCLIENTS || cnt > FD_SETSIZE) + { + errexit("Number of Clients can't exceed %d\n", MAXCLIENTS); + } } num_rexecs = cnt; if (totalnumclients > MAXTOTALPROCS) { errexit("Total number of processes can't exceed %d\n", - MAXTOTALPROCS); + MAXTOTALPROCS); } #ifndef WIN32 @@ -758,14 +758,14 @@ struct sockaddr_in *serveraddr; */ D_PRINTF( "Forking webclient stderr/stdout processes\n" ); switch (fork()) - { - case -1: /* ERROR */ - errexit("fork: %s\n", strerror(errno)); - case 0: /* CHILD */ - exit(echo_client(clienthostname[cnt], tmpfd)); - default: /* PARENT */ - break; - } + { + case -1: /* ERROR */ + errexit("fork: %s\n", strerror(errno)); + case 0: /* CHILD */ + exit(echo_client(clienthostname[cnt], tmpfd)); + default: /* PARENT */ + break; + } #else /* start threads to echo stdout/stderr from clients */ _beginthread(echo_client, 0, (void *)0); @@ -786,7 +786,7 @@ int sock; { int cnt,len; fd_set tmpfdset, leftfdset; - char buffer[NCCARGS]; + char buffer[NCCARGS]; /* * NOW WE NEED TO ACCEPT ALL THE CONNECTIONS FROM THE CLIENTS, @@ -796,28 +796,28 @@ int sock; D_PRINTF( "Beginning accept loop\n" ); for (cnt = 0; cnt < totalnumclients; cnt++) { - D_PRINTF( "Client %d:\t", cnt ); - - { - fd_set readfds; - struct timeval timeout; - int rv; - - timeout.tv_sec = MAX_ACCEPT_SECS; - timeout.tv_usec = 0; - FD_ZERO(&readfds); - FD_SET(sock, &readfds); - - /* if we're hung, quit */ - D_PRINTF("Before select() on listen() socket\n"); - if (!(rv = select(FD_SETSIZE, &readfds, 0, 0, &timeout))) { - fprintf(stdout, - "Listen timeout after %d seconds (%d clients so far)\n", - MAX_ACCEPT_SECS, cnt); - D_PRINTF("select() timed out after %d seconds\n", MAX_ACCEPT_SECS); - errexit("Webmaster terminating\n"); - } - } + D_PRINTF( "Client %d:\t", cnt ); + + { + fd_set readfds; + struct timeval timeout; + int rv; + + timeout.tv_sec = MAX_ACCEPT_SECS; + timeout.tv_usec = 0; + FD_ZERO(&readfds); + FD_SET(sock, &readfds); + + /* if we're hung, quit */ + D_PRINTF("Before select() on listen() socket\n"); + if (!(rv = select(FD_SETSIZE, &readfds, 0, 0, &timeout))) { + fprintf(stdout, + "Listen timeout after %d seconds (%d clients so far)\n", + MAX_ACCEPT_SECS, cnt); + D_PRINTF("select() timed out after %d seconds\n", MAX_ACCEPT_SECS); + errexit("Webmaster terminating\n"); + } + } if(BADSOCKET(socknum[cnt] = accept(sock, 0, 0))) { @@ -834,7 +834,7 @@ int sock; */ FD_SET(socknum[cnt],fdset); } - D_PRINTF( "on socket %d\n",socknum[cnt] ); + D_PRINTF( "on socket %d\n",socknum[cnt] ); } D_PRINTF( "\n" ); @@ -857,7 +857,7 @@ int sock; */ abort_clients(); errexit("Error accepting from one of the clients: %s\n", - neterrstr()); + neterrstr()); break; } #else @@ -880,17 +880,17 @@ int sock; * GET THE READY FROM THIS GUY. * DON'T FORGET TO CLEAR HIS BIT IN THE tmpfdset */ - len = NETREAD(socknum[cnt],buffer,READYSTRLEN); + len = NETREAD(socknum[cnt],buffer,READYSTRLEN); if(len != READYSTRLEN) { abort_clients(); errexit("Error reading from client #%d\n", cnt); } if(memcmp(buffer, READYSTR, READYSTRLEN)) - { + { abort_clients(); fprintf(stdout,"Received bad READY string: len %d, value %s\n", - len,buffer); + len,buffer); } FD_CLR(socknum[cnt],&leftfdset); } @@ -917,13 +917,13 @@ int *socknum; { if(socknum[cnt] > 0) { - /* - * SEND A GO - */ - if(NETWRITE(socknum[cnt], GOSTR, GOSTRLEN) != GOSTRLEN) + /* + * SEND A GO + */ + if(NETWRITE(socknum[cnt], GOSTR, GOSTRLEN) != GOSTRLEN) { - abort_clients(); - errexit("Error sending GO to client %d: %s\n", cnt, neterrstr()); + abort_clients(); + errexit("Error sending GO to client %d: %s\n", cnt, neterrstr()); } } } @@ -934,7 +934,7 @@ int *socknum; */ void GetResults(fdset, page_stats, endtime, timestr, totalnumclients, - statarray) + statarray) fd_set *fdset; page_stats_t **page_stats; time_t *endtime; @@ -972,17 +972,17 @@ stats_t statarray[MAXCLIENTS]; #ifndef WIN32 while(memcmp(&leftfdset,&zerofdset,sizeof(fd_set))) { - tmpfdset = leftfdset; - sleep(1); - returnval = select(FD_SETSIZE,&tmpfdset,NULL,NULL,NULL); - D_PRINTF( "Call to select returned %d, errno %d\n", - returnval, errno ); + tmpfdset = leftfdset; + sleep(1); + returnval = select(FD_SETSIZE,&tmpfdset,NULL,NULL,NULL); + D_PRINTF( "Call to select returned %d, errno %d\n", + returnval, errno ); if(returnval < 0) { /* * ERROR SELECTING. ABORT ALL. */ - D_PRINTF( "select() error %s\n", neterrstr() ); + D_PRINTF( "select() error %s\n", neterrstr() ); abort_clients(); errexit("Error selecting from one of the clients\n"); } @@ -991,84 +991,84 @@ stats_t statarray[MAXCLIENTS]; tmpfdset = leftfdset; { #endif /* WIN32 */ - for(cnt = 0; cnt < totalnumclients; cnt++) - { - /* - * SEE WHICH SOCKETS HAVE A INPUT ON THEM PENDING AND - * RECEIVE IT. - */ - - /* IS THIS A VALID SOCKET? IS IT READY TO READ? */ - if(!BADSOCKET(socknum[cnt]) && (FD_ISSET(socknum[cnt],&tmpfdset))) - { - int len; - - /* - * GET THE TIMING DATA FROM THIS GUY - * THEN REMOVE HIM FROM THE tmpfdset - */ - /* - * READ TIME STATS - * DOES READ() RETURN THE CORRECT LENGTH? - */ - D_PRINTF( "About to read timestats, count %d, errno %d\n", - cnt, errno ); - len = SIZEOF_STATSTEXTBASE + number_of_pages*SIZEOF_DOUBLETEXT; - returnval = recvdata(socknum[cnt], stats_as_text, - len); - D_PRINTF( "Read time stats %d\n", returnval ); - if (returnval != len) /* <= 0) */ - { - D_PRINTF( "Error reading timing stats: %s\n", - neterrstr() ); - fprintf(stderr, "Error reading timing stats: %s\nSocket number %d\n", - neterrstr(),socknum[cnt]); - abort_clients(); - errexit(""); - } /* end if */ - - /* convert text to stats */ - stats_as_text[returnval] = 0; /* add an end marker */ - statarray[cnt] = *text_to_stats(stats_as_text); - - fputc('.', stdout); /* PROGRESS MARKER */ - fflush(stdout); - - if(uil_filelist_f) /* READ PAGE STATS */ - { - for (i = 0; i < number_of_pages; i++) - { - D_PRINTF( "On page_stats[%d][%d]\n", cnt, i ); - returnval = recvdata(socknum[cnt], page_stats_as_text, - SIZEOF_PAGESTATSTEXT); - D_PRINTF( "Read page stats %d\n", returnval ); - - if (returnval != SIZEOF_PAGESTATSTEXT) /* <= 0) */ - { - D_PRINTF( "Error reading page_stats[%d][%d]: %s\n", - cnt, i, neterrstr() ); - fprintf(stderr, "Error reading page_stats[%d][%d]: %s\n", - cnt, i, neterrstr()); - abort_clients(); - errexit(""); - } - D_PRINTF( "Page stats: read %d bytes\n", - returnval ); - - page_stats_as_text[returnval] = 0; /* add an end marker */ - D_PRINTF("strlen(page_stats_as_text) = %d\n", - strlen(page_stats_as_text)); - page_stats[cnt][i] = - *text_to_page_stats(page_stats_as_text); - - } /* end for */ - } /* end if filelist */ - - FD_CLR(socknum[cnt],&leftfdset); - NETCLOSE(socknum[cnt]); - socknum[cnt] = BADSOCKET_VALUE; - } /* end if socknum */ - } /* end for cnt */ + for(cnt = 0; cnt < totalnumclients; cnt++) + { + /* + * SEE WHICH SOCKETS HAVE A INPUT ON THEM PENDING AND + * RECEIVE IT. + */ + + /* IS THIS A VALID SOCKET? IS IT READY TO READ? */ + if(!BADSOCKET(socknum[cnt]) && (FD_ISSET(socknum[cnt],&tmpfdset))) + { + int len; + + /* + * GET THE TIMING DATA FROM THIS GUY + * THEN REMOVE HIM FROM THE tmpfdset + */ + /* + * READ TIME STATS + * DOES READ() RETURN THE CORRECT LENGTH? + */ + D_PRINTF( "About to read timestats, count %d, errno %d\n", + cnt, errno ); + len = SIZEOF_STATSTEXTBASE + number_of_pages*SIZEOF_DOUBLETEXT; + returnval = recvdata(socknum[cnt], stats_as_text, + len); + D_PRINTF( "Read time stats %d\n", returnval ); + if (returnval != len) /* <= 0) */ + { + D_PRINTF( "Error reading timing stats: %s\n", + neterrstr() ); + fprintf(stderr, "Error reading timing stats: %s\nSocket number %d\n", + neterrstr(),socknum[cnt]); + abort_clients(); + errexit(""); + } /* end if */ + + /* convert text to stats */ + stats_as_text[returnval] = 0; /* add an end marker */ + statarray[cnt] = *text_to_stats(stats_as_text); + + fputc('.', stdout); /* PROGRESS MARKER */ + fflush(stdout); + + if(uil_filelist_f) /* READ PAGE STATS */ + { + for (i = 0; i < number_of_pages; i++) + { + D_PRINTF( "On page_stats[%d][%d]\n", cnt, i ); + returnval = recvdata(socknum[cnt], page_stats_as_text, + SIZEOF_PAGESTATSTEXT); + D_PRINTF( "Read page stats %d\n", returnval ); + + if (returnval != SIZEOF_PAGESTATSTEXT) /* <= 0) */ + { + D_PRINTF( "Error reading page_stats[%d][%d]: %s\n", + cnt, i, neterrstr() ); + fprintf(stderr, "Error reading page_stats[%d][%d]: %s\n", + cnt, i, neterrstr()); + abort_clients(); + errexit(""); + } + D_PRINTF( "Page stats: read %d bytes\n", + returnval ); + + page_stats_as_text[returnval] = 0; /* add an end marker */ + D_PRINTF("strlen(page_stats_as_text) = %d\n", + strlen(page_stats_as_text)); + page_stats[cnt][i] = + *text_to_page_stats(page_stats_as_text); + + } /* end for */ + } /* end if filelist */ + + FD_CLR(socknum[cnt],&leftfdset); + NETCLOSE(socknum[cnt]); + socknum[cnt] = BADSOCKET_VALUE; + } /* end if socknum */ + } /* end for cnt */ } /* end while memcmp fd */ /* @@ -1090,7 +1090,7 @@ stats_t statarray[MAXCLIENTS]; Prints out all the results */ void PrintResults( page_stats, endtime, timestr, totalnumclients, statarray, - page_stats_total) + page_stats_total) page_stats_t **page_stats; time_t endtime; char *timestr; @@ -1098,10 +1098,10 @@ int totalnumclients; stats_t statarray[MAXCLIENTS]; page_stats_t *page_stats_total; { - stats_t masterstat; + stats_t masterstat; int cnt,i,j; - double thruput; - struct timeval dtime; + double thruput; + struct timeval dtime; /* * PRINT EVERYTHING OUT @@ -1114,77 +1114,77 @@ page_stats_t *page_stats_total; fprintf(stdout,"----------------------------------\n"); /* fprintf(stdout,"Test for host: %s\n",statarray[cnt].hostname); */ fprintf(stdout,"Total number of pages retrieved from server: %u\n", - statarray[cnt].totalpages); - - rqstat_fprint(stdout, &(statarray[cnt].rs)); - - thruput = thruputpersec((double)(statarray[cnt].rs.totalbytes), - &(statarray[cnt].rs.totalresponsetime)); - - fprintf(stdout, "Thruput average per connection: %.0f bytes/sec\n", - thruput); + statarray[cnt].totalpages); + + rqstat_fprint(stdout, &(statarray[cnt].rs)); + + thruput = thruputpersec((double)(statarray[cnt].rs.totalbytes), + &(statarray[cnt].rs.totalresponsetime)); + + fprintf(stdout, "Thruput average per connection: %.0f bytes/sec\n", + thruput); } if(statarray[cnt].rs.totalconnects > 0) { - D_PRINTF( "Summing stats for %d, with %ld total connections\n", - cnt, statarray[cnt].rs.totalconnects ); + D_PRINTF( "Summing stats for %d, with %ld total connections\n", + cnt, statarray[cnt].rs.totalconnects ); rqstat_sum(&masterstat.rs, &(statarray[cnt].rs)); } - else - { - masterstat.rs.totalerrs += statarray[cnt].rs.totalerrs; - } + else + { + masterstat.rs.totalerrs += statarray[cnt].rs.totalerrs; + } } for (i=0; i < totalnumclients; i++) { - for (j=0; j < number_of_pages; j++) - { - D_PRINTF( "Summing page stats for %d, page %d, with %d connects\n", - i, j, statarray[i].page_numbers[j] ); + for (j=0; j < number_of_pages; j++) + { + D_PRINTF( "Summing page stats for %d, page %d, with %d connects\n", + i, j, statarray[i].page_numbers[j] ); - if (statarray[i].page_numbers[j] != 0) - { - rqst_stats_t *pst_rs; - rqst_stats_t *ps_rs; + if (statarray[i].page_numbers[j] != 0) + { + rqst_stats_t *pst_rs; + rqst_stats_t *ps_rs; - pst_rs = &(page_stats_total[j].rs); - ps_rs = &(page_stats[i][j].rs); + pst_rs = &(page_stats_total[j].rs); + ps_rs = &(page_stats[i][j].rs); - rqstat_sum(pst_rs, ps_rs); + rqstat_sum(pst_rs, ps_rs); - page_stats_total[j].totalpages += page_stats[i][j].totalpages; - masterstat.totalpages += page_stats[i][j].totalpages; + page_stats_total[j].totalpages += page_stats[i][j].totalpages; + masterstat.totalpages += page_stats[i][j].totalpages; - /* yes, this is assignment, not sum */ - page_stats_total[j].page_size = page_stats[i][j].page_size; + /* yes, this is assignment, not sum */ + page_stats_total[j].page_size = page_stats[i][j].page_size; - page_stats_total[j].page_valid = 1; - } - } + page_stats_total[j].page_valid = 1; + } + } } /* print page statistics */ if (verbose) { - for (i = 0; i < number_of_pages; i++) - { - if (page_stats_total[i].page_valid == 1) - { - page_stats_t *pst; + for (i = 0; i < number_of_pages; i++) + { + if (page_stats_total[i].page_valid == 1) + { + page_stats_t *pst; - pst = &(page_stats_total[i]); + pst = &(page_stats_total[i]); - printf ("===============================================================================\n"); - printf ("Page # %d\n\n", i); - printf ("Total number of times page was hit %u\n", - pst->totalpages); + printf ("===============================================================================\n"); + printf ("Page # %d\n\n", i); + printf ("Total number of times page was hit %u\n", + pst->totalpages); - rqstat_print(&(pst->rs)); + rqstat_print(&(pst->rs)); - printf ("Page size %u \n", pst->page_size); - printf ("===============================================================================\n\n"); - } - } + printf ("Page size %u \n", pst->page_size); + printf ("===============================================================================\n\n"); + } + } } fprintf(stdout,"===============================================================================\n"); @@ -1196,14 +1196,14 @@ page_stats_t *page_stats_total; for (i=1; i < totalnumclients; i++) { if ((statarray[i].rs.totalconnects > 0) && - (statarray[i].total_num_of_files != masterstat.total_num_of_files)) - { - fprintf(stdout,"**********************************************************************\n"); - fprintf(stdout,"**** ERROR: number of files in each test configuration is not the same\n"); - fprintf(stdout,"**** ERROR: Check configuration file %s on each client\n", configfile); - fprintf(stdout,"**********************************************************************\n"); - break; - } + (statarray[i].total_num_of_files != masterstat.total_num_of_files)) + { + fprintf(stdout,"**********************************************************************\n"); + fprintf(stdout,"**** ERROR: number of files in each test configuration is not the same\n"); + fprintf(stdout,"**** ERROR: Check configuration file %s on each client\n", configfile); + fprintf(stdout,"**********************************************************************\n"); + break; + } } @@ -1229,28 +1229,28 @@ page_stats_t *page_stats_total; (double)(masterstat.rs.totalresponsetime.tv_sec) /(testtime)); avgtime(&masterstat.rs.totalresponsetime, - masterstat.rs.totalconnects, &dtime); + masterstat.rs.totalconnects, &dtime); fprintf(stdout, "Average response time: \t\t%4.4f millisec\n", - (double)1000*(dtime.tv_sec + (double)dtime.tv_usec / 1000000)); + (double)1000*(dtime.tv_sec + (double)dtime.tv_usec / 1000000)); fprintf(stdout, "Error Level:\t\t\t%4.4f %%\n", - (double)(100 * masterstat.rs.totalerrs)/(masterstat.rs.totalconnects)); + (double)(100 * masterstat.rs.totalerrs)/(masterstat.rs.totalconnects)); /* so much for the key metrics */ thruput = 8 * thruputpersec((double)(masterstat.rs.totalbytes), - &(masterstat.rs.totalresponsetime)); - + &(masterstat.rs.totalresponsetime)); + fprintf(stdout, "Average client thruput: \t%4.4f Mbit/sec\n", - thruput/(1024*1024)); + thruput/(1024*1024)); fprintf(stdout,"Sum of client response times:\t%u.%u sec\n", - masterstat.rs.totalresponsetime.tv_sec, - masterstat.rs.totalresponsetime.tv_usec); + masterstat.rs.totalresponsetime.tv_sec, + masterstat.rs.totalresponsetime.tv_usec); fprintf(stdout,"Total number of pages read:\t%u\n\n", - masterstat.totalpages); + masterstat.totalpages); /* Remaining stats are the same as usual */ @@ -1271,29 +1271,29 @@ void main(const int argc, char *argv[]) { - int sync_sock; - int i; - int j; - char buffer[NCCARGS]; - char commandline[NCCARGS]; - char *timestr; - time_t starttime; - time_t endtime; - fd_set fdset; + int sync_sock; + int i; + int j; + char buffer[NCCARGS]; + char commandline[NCCARGS]; + char *timestr; + time_t starttime; + time_t endtime; + fd_set fdset; /* make the big arrays static to avoid stack overflow */ - static char clienthostname[MAXCLIENTS][MAXHOSTNAMELEN]; - static stats_t statarray[MAXCLIENTS]; + static char clienthostname[MAXCLIENTS][MAXHOSTNAMELEN]; + static stats_t statarray[MAXCLIENTS]; page_stats_t **page_stats; page_stats_t *page_stats_total; - struct sockaddr_in serveraddr; + struct sockaddr_in serveraddr; #ifdef WIN32 - WSADATA WSAData; - COORD dwSize; + WSADATA WSAData; + COORD dwSize; if ((WSAStartup(MAKEWORD(1,1), &WSAData)) != 0) { - errexit("Error in WSAStartup()\n"); + errexit("Error in WSAStartup()\n"); } atexit(sock_cleanup); @@ -1334,8 +1334,8 @@ main(const int argc, char *argv[]) mymalloc(totalnumclients*sizeof(page_stats_t *)); for (i=0; i < totalnumclients; i++) { - page_stats[i] = (page_stats_t *) - mymalloc(number_of_pages*sizeof(page_stats_t)); + page_stats[i] = (page_stats_t *) + mymalloc(number_of_pages*sizeof(page_stats_t)); } page_stats_total = (page_stats_t *)mymalloc(number_of_pages*sizeof(page_stats_t)); @@ -1346,7 +1346,7 @@ main(const int argc, char *argv[]) for (i=0; i < totalnumclients; i++) { for (j=0; j < number_of_pages; j++) { page_stats_init(&(page_stats[i][j])); - } + } } for (i=0; i < number_of_pages; i++) { page_stats_init(&(page_stats_total[i])); @@ -1387,16 +1387,16 @@ main(const int argc, char *argv[]) } GetResults( &fdset, page_stats, &endtime, timestr, totalnumclients, - statarray); + statarray); gettimeofday (&sumedh_end, 0); PrintResults( page_stats, endtime, timestr, totalnumclients, statarray, - page_stats_total); + page_stats_total); /* free memory */ for (i = 0; i < totalnumclients; i++) { - free(page_stats[i]); + free(page_stats[i]); } free(page_stats); free(page_stats_total); @@ -1408,13 +1408,12 @@ main(const int argc, char *argv[]) void HostEntCpy(struct hostent *dest, struct hostent *src) { - - dest->h_name = (char *)malloc(strlen(src->h_name)+1); - strcpy(dest->h_name, src->h_name); - printf("WebMaster name = %s\n", dest->h_name); - dest->h_aliases = src->h_aliases; - dest->h_addrtype = src->h_addrtype; - dest->h_length = src->h_length; - dest->h_addr_list = src->h_addr_list; + + dest->h_name = (char *)malloc(strlen(src->h_name)+1); + strcpy(dest->h_name, src->h_name); + printf("WebMaster name = %s\n", dest->h_name); + dest->h_aliases = src->h_aliases; + dest->h_addrtype = src->h_addrtype; + dest->h_length = src->h_length; + dest->h_addr_list = src->h_addr_list; } - -- cgit v1.2.1