webbench详解与源码注释

本文详细介绍了webbench的组成,包括makefile的编译安装过程,重点分析了phony目标的概念及其优势。Socket.c文件封装了TCP套接字,支持DNS查询,webbench.c中的关键函数如build_request用于构建HTTP请求,bench.c和benchcore.c负责并发请求及性能测试。
摘要由CSDN通过智能技术生成

webbench总共就是三个文件,makefile,socket.c,webbench.c

makefile

完成编译,sudo make install安装到 /usr/local/bin目录下面。

其实 make install命令就是把可执行文件拷贝到/bin目录下面。

INSTALL(1)                       User Commands                      INSTALL(1)

NAME
       install - copy files and set attributes

SYNOPSIS
       install [OPTION]... [-T] SOURCE DEST
       install [OPTION]... SOURCE... DIRECTORY
       install [OPTION]... -t DIRECTORY SOURCE...
       install [OPTION]... -d DIRECTORY...

DESCRIPTION
       This  install  program copies files (often just compiled) into destina‐
       tion locations you choose.  If you  want  to  download  and  install  a
       ready-to-use package on a GNU/Linux system, you should instead be using
       a package manager like yum(1) or apt-get(1).

phony:

PHONY定义伪目标的命令一定会被执行,下面尝试分析这种优点的妙处。

1、如果我们指定的目标不是创建目标文件,而是使用makefile执行一些特定的命令,例如:

clean:rm *.o temp我们希望,只要输入"make clean"后,"rm *.o temp"命令就会执行。但是,当当前目录中存在一个和指定目标重名的文件时,例如clean文件,结果就不是我们想要的了。输入"make clean"后,“rm *.o temp” 命令一定不会被执行。

解决的办法是,将目标clean定义成伪目标就成了。无论当前目录下是否存在"clean"这个文件,输入"make clean"后,"rm *.o temp"命令都会被执行。

注意:这种做法的带来的好处还不止此,它同时提高了make的执行效率,因为将clean定义成伪目标后,make的执行程序不会试图寻找clean的隐含规则。

Socket.c

Sokcet.c封装了对于目标网站的TCP套接字的构造,其中Socket函数用于获取连接目标网站TCP套接字.使用了gethostbyname来进行dns查询。使得webbench支持域名测试与直接ip测试。

webbench.c

小函数:

alarm_handler :作为超时信号的回调函数,设置 timerexpired 全局变量为1;

usage:用于向控制台打印帮助信息。

核心就是三个函数benchcore ,build request ,bench

build_request

根据传入的url以及一些全局设置,把请求报文的字符串拼接出来。

在这里插入图片描述

//把请求报文给拼出来
void build_request(const char *url)
{
   
   char tmp[10];
   int i;

   bzero(host, MAXHOSTNAMELEN);
   bzero(request, REQUEST_SIZE);

   if (force_reload && proxyhost != NULL && http10 < 1)
      http10 = 1;
   if (method == METHOD_HEAD && http10 < 1)
      http10 = 1;
   if (method == METHOD_OPTIONS && http10 < 2)
      http10 = 2;
   if (method == METHOD_TRACE && http10 < 2)
      http10 = 2;

//根据method,写下请求方法
   switch (method)
   {
   
   default:
   case METHOD_GET:
      strcpy(request, "GET");
      break;
   case METHOD_HEAD:
      strcpy(request, "HEAD");
      break;
   case METHOD_OPTIONS:
      strcpy(request, "OPTIONS");
      break;
   case METHOD_TRACE:
      strcpy(request, "TRACE");
      break;
   }

//写空格
   strcat(request, " ");

//判断输入的url,非http的抛弃,过长的抛弃
   if (NULL == strstr(url, "://"))
   {
   
      fprintf
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值