宏定義
#define METHOD_GET 0
#define METHOD_HEAD 1
#define METHOD_OPTIONS 2
#define METHOD_TRACE 3
#define PROGRAM_VERSION "1.5"
#defind REQUEST_SIZE 2048
全局變量
volatile int timerexpired=0;
int speed=0;
int failed=0;
int bytes=0;
/* globals */
int http10=1; /* 0 - http/0.9, 1 - http/1.0, 2 - http/1.1 */
int method=METHOD_GET;
int clients=1;
int force=0;
int force_reload=0;
int proxyport=80;
char *proxyhost=NULL;
int benchtime=30;
/* internal */
int mypipe[2];
char host[MAXHOSTNAMELEN];
char request[REQUEST_SIZE];
分析:
由main函數(shù)入手
main函數(shù)中首先對命令行進行解析十拣,如果命令行數(shù)量為1叙身,則說明沒有輸入?yún)?shù),此時要輸出幫助信息信轿。
對命令行參數(shù)進行解析晃痴,如果含有f财忽,則讓force=1,如果含有r即彪,則讓force_reload為1,其他依次類推。當參數(shù)為p漏益,則代表使用了代理服務器酬凳,那么就查找字符串中的最后一個':'的位置并將從該字符開始的字符串返回給tmp遭庶,讓proxyhost指向代理服務器地址。
如果tmp變量的值等于optarg稠屠,則說明只有端口號沒有主機名峦睡,報錯。注意這里的等于并非將字符串復制了权埠,而僅是復制了地址榨了。
如果參數(shù)中含有'h'或'?',則返回幫助信息攘蔽,參數(shù)是'c'龙屉,則獲取clients的數(shù)量
使用build_request方法對url建立連接
接下來的部分是輸出一些設置信息。
build_request
建立連接
bench
創(chuàng)建子進程并使用子進程發(fā)起請求满俗,子進程請求的結果寫入管道由父進程讀取
bench_core
創(chuàng)建新連接转捕、注冊信號函數(shù)及通信等