📄 checkhttp.c
字号:
#include "checkHttp.h"#include "reportToConsole.h"/*this file must all modifye TODO:*/int ClientSocket[MaxHttpUrl];long long sendPacket[MaxHttpUrl];long long recvPacket[MaxHttpUrl];char protocolPacket[MaxHttpUrl][MAX_PACKET];int aSendNum;int aRecvNum;time_t sTime,eTime;fd_set HTTPSet,testSet;char tmpcheck[100];extern FILE *httpLogFd;void analysis(){ int i; float rate; int downNum = 0; int notSmoothNum = 0; int wellNum = 0; for (i = 0;i < HttpUrlNum;i++) { if (ClientSocket[i] != -1) { rate =(float) recvPacket[i]/sendPacket[i];/* rate of pocket recv */ if (rate < RATE_LEVEL) { notSmoothNum++; sprintf(tmpcheck,"[WARNING] www server:%s is not smooth;the rate is %f\n",HttpUrl[i],rate); display(textHttpBuff,tmpcheck,httpLogFd); } else { wellNum++; sprintf(tmpcheck,"[OK] www server:%s is well,the rate is:%f\n",HttpUrl[i],rate); display(textHttpBuff,tmpcheck,httpLogFd); } } else downNum++; } if (HTTPServFd != -1) reportToConsole("HTTP",HTTPServFd,downNum,notSmoothNum,wellNum);}int searchFd(int fd){ int i; for (i = 0;i < HttpUrlNum;i++) { if (fd == ClientSocket[i]) break; } return i;}void newSockFd(){ int i; for (i = 0;i < HttpUrlNum;i++) { close(ClientSocket[i]); servConnect(HttpUrl[i],&(ClientSocket[i]),HttpPort,textHttpBuff,httpLogFd); }}void mkSendPacket(){ int i; bzero(&protocolPacket,sizeof(protocolPacket)); for (i = 0;i < HttpUrlNum;i++) { if (ClientSocket[i] != -1) genHttpPacket(HttpUrl[i],protocolPacket[i]); }}void sendData(){ int i; aSendNum = 0; for (i = 0;i < HttpUrlNum;i++) { if (ClientSocket[i] != -1) { int res; int sendBuffSize = strlen(protocolPacket[i]); res = write(ClientSocket[i],protocolPacket[i],sendBuffSize); /* no block */ if (res == -1) { //perror("write"); close(ClientSocket[i]); FD_CLR(ClientSocket[i],&testSet); FD_CLR(ClientSocket[i],&HTTPSet); continue; } else { aSendNum++; sendPacket[i]++; } } }}void selectHandle(){ char recvBuff[256]; int fd; for (fd = 0;fd < FD_SETSIZE;fd++) { if (FD_ISSET(fd,&testSet)) { aRecvNum++; int nread; ioctl(fd,FIONREAD,&nread); if (nread == 0) { sprintf(tmpcheck,"[FAILURE] www server disconncet\n"); display(textHttpBuff,tmpcheck,httpLogFd); } else { int recvBuffSize = strlen(recvBuff); read(fd,recvBuff,recvBuffSize); /* int res; res = analysPacket(recvBuff); if (res == 1) { int id; determine the id which socket fd is sockfd recvPacket[id]++; }*/ int id; id = searchFd(fd); recvPacket[id]++; sprintf(tmpcheck,"[MESSAGE] www server: %s send %lld packets,and receive %lld packets\n", HttpUrl[id],sendPacket[id],recvPacket[id]); display(textHttpBuff,tmpcheck,httpLogFd); // printf("%ld packets\n",recvPacket[id]); } close(fd); FD_CLR(fd,&HTTPSet); } }}void resetSet(){ int i; FD_ZERO(&HTTPSet); for (i = 0;i < HttpUrlNum;i++) { if (ClientSocket[i] != -1) FD_SET(ClientSocket[i],&HTTPSet); }}void handle(){ time_t s_t,e_t; int i; struct timeval timeOut; newSockFd(); /*make the http url connect*/ resetSet(); /*add the socket to the readset*/ aRecvNum = 0; sendData(); s_t = time((time_t*)0); while (1) { testSet = HTTPSet; timeOut.tv_sec = SELECT_TIME_SEC; timeOut.tv_usec = SELECT_TIME_USEC; /* time out is 1 second */ int res; res = select(FD_SETSIZE,&testSet,(fd_set*)NULL,(fd_set*)NULL,&timeOut); switch(res) { case 0 :// printf("time out\n"); break; case -1 :// printf("http select\n"); break;// exit(-1); default : selectHandle(); s_t = time((time_t*)0); break; } e_t = time((time_t*)0); double diff_t; diff_t = difftime(e_t,s_t); if (aRecvNum >= aSendNum || diff_t > RECV_TIME_OUT ) /*time controll*/ break; }}void checkHttp(){ int i ; for (i = 0;i <HttpUrlNum;i++) sendPacket[i] = recvPacket[i] = 0; sTime = time((time_t*)0); mkSendPacket(); while (running) { handle(); eTime = time((time_t*)0); double diffTime; diffTime = difftime(eTime,sTime); if (diffTime >= CHECK_TIME_VAL) /* check between CHECK_TIME_VAL*/ { sTime = eTime; analysis(); /* analays the all socket */ } sleep(1); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -