⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webserver.c

📁 LINUX平台上小型WEB服务器的设计与实现,支持CGI接口.
💻 C
字号:
/*****************************************************/
/**创建者:杨希        日期:2005/04/30             **/
/**文件名:globals.h    版本:1.0.4                 **/
/**描  述:WEB服务器的主驱动程序文件,其结构为典型的**/
/**        多进程结构。                             **/
/**其  它:相比1.0.2主要改正了getparaments的一些BUG **/
/*****************************************************/

#include"globals.h"
#include"helpfunc.h"

/******************************************/
int main(int argc,char *argv[])
{
	int sockfd, acc_sock;
	struct sockaddr_in serverAddr, clientAddr;
	int len;
	pid_t pid;
	
	/* 建立通信的套接口 */
	sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if(sockfd < 0){
		fprintf(stderr, "creat sock err!\n");
		exit(1);
	}
	
	/* 初始化主机信息 */
	memset(&serverAddr, 0, sizeof(serverAddr));
	serverAddr.sin_family = AF_INET;
	serverAddr.sin_port = htons(SERVER_PORT);
	serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
	
	if(bind(sockfd, &serverAddr,sizeof(serverAddr)) < 0){
		fprintf(stderr, "bind error!\n");
		exit(1);
	}
	
	if(listen(sockfd,10) < 0){
		fprintf(stderr, "listen error!\n");
		exit(1);
	}
	
	/* 开始接受用户请求 */
	while(1){
		len = sizeof(struct sockaddr_in);
		acc_sock = accept(sockfd, &clientAddr, &len);
		if(acc_sock < 0){
				fprintf(stderr, "accept error!\n");
				exit(1);
		}
		
		/* 产生一个子进程具体处理请求 */
		if((pid = fork()) < 0){
			fprintf(stderr, "creat child error!\n");
			exit(1);
		}else if(pid == 0){
			handleRequest(acc_sock, clientAddr);
		}else{
			/* 父进程关闭该套接口,继续监听其它主机的连接请求*/
			close(acc_sock);
			memset(&clientAddr, 0, sizeof(clientAddr));
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -