第7章嵌入式Linux网络应用开发(新)2祥解.ppt
文本预览下载声明
setbuf(f, 0);? alarm(TIMEOUT);? if (!fgets(buf, 150, f)) { //读连接,如出错提示 fprintf(stderr, httpd: Error reading connection, error %d\n, errno); fclose(f); alarm(0); return 0; } alarm(0);? referrer[0] = \0; content_length = -1; alarm(TIMEOUT); else if (!strcmp(r - 4, .gif)) DoGif(f,c);// gif文件处理 else if (!strcmp(r - 4, .jpg) || !strcmp(r - 5, .jpeg)) DoJpeg(f,c); else if (!strcmp(r - 4, .htm) || !strcmp(r - 5, .html)) DoHTML(f,c); //HTML文件处理 else DoText(f,c); //文本文件处理 } else{ PrintHeader(f,‘h’);//发协议文件头 alarm(TIMEOUT); fprintf(f, htmlheadtitle404 File Not Found/title/head\n); fprintf(f, bodyThe requested URL was not found on this server/body/html\n); alarm(0); } return 0; } //读下一行进行解析 while (fgets(buf1, 150, f) (strlen(buf1) 2)) { alarm(TIMEOUT); if (!strncasecmp(buf1, Referer:, 8)) { char * c = buf1+8; while (isspace(*c)) c++; strcpy(referrer, c); } else if (!strncasecmp(buf1, Referrer:, 9)) { char * c = buf1+9; while (isspace(*c)) c++; strcpy(referrer, c); } else if (!strncasecmp(buf1, Content-length:, 15)) { content_length = atoi(buf1+15); } } alarm(0); if (ferror(f)) { fprintf(stderr, http: Error continuing reading connection, error %d\n, errno); fclose(f); return 0; } ParseReq(f, buf);?//解析HTTP请求并输出 alarm(TIMEOUT); fflush(f); fclose(f); alarm(0); return 1; } void* key(void* data) //键盘处理函数 { int c; for(;;){ c=getchar(); if(c == q || c == Q){ KEY_QUIT=1; exit(10); break; } } } int main(int argc, char *argv[]) //主函数定义 { int fd, s; int len; volatile int true = 1; struct sockaddr_in ec; struct sockaddr_in server_sockaddr; pthread_t th_key; //声明了一个线程 void * retval;? ?//获取异常信号定义 signal(SIGCHLD, SIG_IGN); signal(SIGPIPE, SIG_IGN); signal(
显示全部