📄 webclient.c
字号:
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)); } /* if (load_file_list[pageval].port_number[cnt] != 0) { loc_portnum = load_file_list[pageval].port_number[cnt]; } else { loc_portnum = portnum; } */ loc_portnum = portnum; if ((load_file_list[pageval].servername[cnt] != NULL) && *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, NULL, NULL, &timeout)) { D_PRINTF("select() returned %d\n", rv); D_PRINTF("Client terminating at request of webmaster\n"); exit(2); } } } /* END for cnt */ /* * DO WE HAVE A VALID RETURN FROM GET()? * WHY NOT USE returnval HERE? */ if ((returnval == 0) && (cnt == load_file_list[pageval].num_of_files) && (timerarray[cnt-1].valid == 2)) { rqst_stats_t *ps_rs; rqst_stats_t *pst_rs; ps_rs = &(page_stats[pageval].rs); pst_rs = &(page_stats_tmp.rs); rqstat_sum(ps_rs, pst_rs); page_stats[pageval].totalpages++; 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 ); D_PRINTF( "Makeload returning %d\n", cnt ); return(cnt);} /* END makeload() */#ifdef WIN32/* close socket library at exit() time */void sock_cleanup(void) { WSACleanup();}#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;int total_weight;char uil_filelist[NCCARGS];char filelist[MAXNUMOFFILES][MAXPATHLEN];char configfile[MAXPATHLEN];char connectstr[MAXHOSTNAMELEN+10];voidmain(int argc, char *argv[]){ 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;#else struct timeval sleeptime; /* set the amount of time that we'll pause before sending a "." to the webmaster */ sleeptime.tv_sec = SLEEP_USEC/1000000; sleeptime.tv_usec = SLEEP_USEC % 1000000;#endif /* WIN32 */ debugfile = stderr;#ifdef WIN32 MessageBeep(~0U); /* announce our existence */ MessageBeep(~0U); MessageBeep(~0U); err = WSAStartup(MAKEWORD(1,1), &WSAData); if (err != 0) { errexit("Error in WSAStartup()\n"); } atexit(sock_cleanup); SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST); /* create semaphore in locked state */ hSemaphore = CreateSemaphore(NULL, 0, 1, NULL); if(hSemaphore == NULL) { errexit("Create semaphore failed: %d", GetLastError()); }#endif /* WIN32 */ memset(webserver, 0, sizeof(webserver)); memset(webmaster, 0, sizeof(webmaster)); memset(proxyserver, 0, sizeof(proxyserver)); memset(connectstr, 0, sizeof(connectstr)); /* * PARSE THE COMMAND LINE OPTIONS */ while((getoptch = getopt(argc,argv,"P:f:t:l:p:u:R:w:c:n:sdv")) != EOF) { switch(getoptch) { case 'c': sprintf(connectstr, "%s", optarg); amclient = 1; printf("%s", OKSTR); /* sent back to webmaster */ fflush(stdout); break; case 'd': debug = 0; /* sumedh */ 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 't': testtime = 60 * atoi(optarg); 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; default: usage(argv[0]); } } returnerr("Client begins...\n"); D_PRINTF( "Running in debug mode\n\n" ); /* print the command line */ for (i = 0; i < argc; i++) D_PRINTF( "%s ", argv[i] ); D_PRINTF( "\n\n" ); if(testtime && numloops) { /* * EITHER numloops OR testtime, BUT NOT BOTH. */ usage(argv[0]); } if(havewebserver != 1) {#ifdef WIN32 /* * THE SERVER'S NAME MUST BE SPECIFIED */ returnerr("No WWW Server specified\n"); usage(argv[0]);#else /* IF IT ISN'T, WE ASSUME LOCALHOST */ sprintf(webserver, "%s", "localhost"); havewebserver = 1;#endif /* WIN32 */ } currarg = optind; numfiles = 0; while(currarg != argc) { /* * GET THE URLS TO RETRIEVE. */ if (numfiles == MAXNUMOFFILES) { returnerr("Maximum of %d files on the command line.\n"); usage(argv[0]); } sscanf(argv[currarg],"%s",filelist[numfiles]); numfiles++; currarg++; } if ((numfiles != 0) && uil_filelist_f) { returnerr("Both a filelist and UIL specified.\n"); usage(argv[0]); } if((numfiles == 0) && !(uil_filelist_f)) { /* * AT LEAST ONE FILE MUST BE SPECIFIED */ returnerr("No UIL resources or filelist specified \n"); usage(argv[0]); } if((numloops == 0) && (testtime == 0)) { /* * NO SPECIFIED NUMBER OF LOOPS, AND NO TEST TIME */ usage(argv[0]); } if(numclients > MAXPROCSPERNODE || numclients < 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,":")) == NULL) { /* * 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); } if (resolve_addrs(webserver, "tcp", &webserv_phe, &webserv_ppe, &webserv_addr, &webserv_type)) exit(1); /* * INITIALIZE DATA */ /* allocate space for dynamic arrays */ load_file_list = (page_list_t *)mymalloc((MAXNUMOFPAGES)*sizeof(page_list_t)); if (uil_filelist_f) { /* take a guess at the number of URLs in the file */ D_PRINTF( "About to parse filelist %s\n", uil_filelist ); number_of_pages = count_file_list(uil_filelist); numfiles = 1; /* IF WE HAVE A FILELIST, PARSE IT */ /* allocate memory */ D_PRINTF( "Allocating page list: %ld by %d\n", number_of_pages, numfiles ); for (i=0; i<number_of_pages; i++) { for (j=0; j<MAXNUMOFFILES; j++) { load_file_list[i].servername[j] = (char *)mymalloc(URL_SIZE); load_file_list[i].filename[j] = (char *)mymalloc(URL_SIZE); } } D_PRINTF( "Parsing file list: %s\n", uil_filelist ); parse_file_list(uil_filelist, load_file_list, &number_of_pages, &numfiles); /* free memory for pages that won't be used? */ D_PRINTF( "Actual page list: %ld by %d\n", number_of_pages, MAXNUMOFFILES ); D_PRINTF( "Setting up weighting for %ld pages\n", number_of_pages ); total_weight = load_percent(load_file_list, number_of_pages); /* total_weight = load_percent(load_file_list, number_of_pages, pages); */ } else { /* no uil file */ number_of_pages = numfiles; } if (number_of_pages < 1) { /* no pages - exit */ D_PRINTF( "No valid URLs found\n" ); errexit("No valid URLs found\n"); }#ifndef WIN32 /* * IF WE ARE TO FORK ADDITIONAL CLIENTS ON THIS MACHINE, * WE MUST DO IT BEFORE WE CONNECT TO THE MASTER. * * FIRST, SET UP SIGNAL HANDLING */ signal(SIGCHLD, childhandler); for(i = 0; i < numclients; i++) { thr_create (NULL, NULL, ClientThread, NULL, THR_BOUND, NULL); /* switch(fork())
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -