亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? main.c

?? Linux內(nèi)核源代碼 為壓縮文件 是<<Linux內(nèi)核>>一書中的源代碼
?? C
字號(hào):
/*kHTTPd -- the next generationMain programkHTTPd TNG consists of 1 thread, this main-thread handles ALL connectionssimultanious. It does this by keeping queues with the requests in differentstages.The stages are<not accepted> 		-	TCP/IP connection is not accepted yetWaitForHeaders		-	Connection is accepted, waiting for headersDataSending		-	Headers decoded, sending file-dataUserspace		-	Requires userspace daemon Logging			-	The request is finished, cleanup and loggingA typical flow for a request would be:<not accepted>WaitForHeadersDataSendingLoggingor<not accepted>WaitForHeadersUserspace*//**************************************************************** *	This program is free software; you can redistribute it and/or modify *	it under the terms of the GNU General Public License as published by *	the Free Software Foundation; either version 2, or (at your option) *	any later version. * *	This program is distributed in the hope that it will be useful, *	but WITHOUT ANY WARRANTY; without even the implied warranty of *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *	GNU General Public License for more details. * *	You should have received a copy of the GNU General Public License *	along with this program; if not, write to the Free Software *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * ****************************************************************/static int errno;#define __KERNEL_SYSCALLS__#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/signal.h>#include <linux/init.h>#include <linux/wait.h>#include <linux/smp_lock.h>#include <asm/unistd.h>#include "structure.h"#include "prototypes.h"#include "sysctl.h"struct khttpd_threadinfo threadinfo[CONFIG_KHTTPD_NUMCPU];  /* The actual work-queues */atomic_t	ConnectCount;atomic_t	DaemonCount;static int	ActualThreads; /* The number of actual, active threads */static int ConnectionsPending(int CPUNR){	if (threadinfo[CPUNR].DataSendingQueue!=NULL) return O_NONBLOCK;	if (threadinfo[CPUNR].WaitForHeaderQueue!=NULL) return O_NONBLOCK;	if (threadinfo[CPUNR].LoggingQueue!=NULL) return O_NONBLOCK;	if (threadinfo[CPUNR].UserspaceQueue!=NULL) return O_NONBLOCK;  return 0;}static wait_queue_head_t DummyWQ[CONFIG_KHTTPD_NUMCPU];static atomic_t Running[CONFIG_KHTTPD_NUMCPU]; static int MainDaemon(void *cpu_pointer){	int CPUNR;	sigset_t tmpsig;		DECLARE_WAITQUEUE(main_wait,current);		MOD_INC_USE_COUNT;		CPUNR=0;	if (cpu_pointer!=NULL)	CPUNR=(int)*(int*)cpu_pointer;	sprintf(current->comm,"khttpd - %i",CPUNR);	daemonize();		init_waitqueue_head(&(DummyWQ[CPUNR]));		/* Block all signals except SIGKILL, SIGSTOP and SIGHUP */	spin_lock_irq(&current->sigmask_lock);	tmpsig = current->blocked;	siginitsetinv(&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP)| sigmask(SIGHUP));	recalc_sigpending(current);	spin_unlock_irq(&current->sigmask_lock);			if (MainSocket->sk==NULL)	 	return 0;	add_wait_queue_exclusive(MainSocket->sk->sleep,&(main_wait));	atomic_inc(&DaemonCount);	atomic_set(&Running[CPUNR],1);		while (sysctl_khttpd_stop==0)	{		int changes = 0;								changes +=AcceptConnections(CPUNR,MainSocket);		if (ConnectionsPending(CPUNR))		{			changes +=WaitForHeaders(CPUNR);			changes +=DataSending(CPUNR);			changes +=Userspace(CPUNR);			changes +=Logging(CPUNR);			/* Test for incomming connections _again_, because it is possible			   one came in during the other steps, and the wakeup doesn't happen			   then.			*/			changes +=AcceptConnections(CPUNR,MainSocket);		}				if (changes==0) 		{			(void)interruptible_sleep_on_timeout(&(DummyWQ[CPUNR]),1);				if (CPUNR==0) 				UpdateCurrentDate();		}					if (signal_pending(current)!=0)		{			(void)printk(KERN_NOTICE "kHTTPd: Ring Ring - signal received\n");			break;		  		}		}		remove_wait_queue(MainSocket->sk->sleep,&(main_wait));		StopWaitingForHeaders(CPUNR);	StopDataSending(CPUNR);	StopUserspace(CPUNR);	StopLogging(CPUNR);		atomic_set(&Running[CPUNR],0);	atomic_dec(&DaemonCount);	(void)printk(KERN_NOTICE "kHTTPd: Daemon %i has ended\n",CPUNR);	MOD_DEC_USE_COUNT;	return 0;}static int CountBuf[CONFIG_KHTTPD_NUMCPU];/*The ManagementDaemon has a very simple task: Start the real daemons when the user wants usto, and cleanup when the users wants to unload the module.Initially, kHTTPd didn't have this thread, but it is the only way to have "delayed activation",a feature required to prevent accidental activations resulting in unexpected backdoors.*/static int ManagementDaemon(void *unused){	sigset_t tmpsig;	int waitpid_result;		DECLARE_WAIT_QUEUE_HEAD(WQ);			sprintf(current->comm,"khttpd manager");	daemonize();		/* Block all signals except SIGKILL and SIGSTOP */	spin_lock_irq(&current->sigmask_lock);	tmpsig = current->blocked;	siginitsetinv(&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP) );	recalc_sigpending(current);	spin_unlock_irq(&current->sigmask_lock);	/* main loop */	while (sysctl_khttpd_unload==0)	{		int I;						/* First : wait for activation */				sysctl_khttpd_start = 0;				while ( (sysctl_khttpd_start==0) && (!signal_pending(current)) && (sysctl_khttpd_unload==0) )		{			current->state = TASK_INTERRUPTIBLE;			interruptible_sleep_on_timeout(&WQ,HZ); 		}				if ( (signal_pending(current)) || (sysctl_khttpd_unload!=0) )		 	break;		 			/* Then start listening and spawn the daemons */		 			if (StartListening(sysctl_khttpd_serverport)==0)		{			continue;		}				ActualThreads = sysctl_khttpd_threads;		if (ActualThreads<1) 			ActualThreads = 1;					if (ActualThreads>CONFIG_KHTTPD_NUMCPU) 			ActualThreads = CONFIG_KHTTPD_NUMCPU;				/* Write back the actual value */				sysctl_khttpd_threads = ActualThreads;				InitUserspace(ActualThreads);				if (InitDataSending(ActualThreads)!=0)		{			StopListening();			continue;		}		if (InitWaitHeaders(ActualThreads)!=0)		{			I=0;			while (I<ActualThreads)			{				StopDataSending(I);				I++;			}			StopListening();			continue;		}			/* Clean all queues */		memset(threadinfo, 0, sizeof(struct khttpd_threadinfo));		 			I=0;		while (I<ActualThreads)		{			atomic_set(&Running[I],1);			(void)kernel_thread(MainDaemon,&(CountBuf[I]), CLONE_FS | CLONE_FILES | CLONE_SIGHAND);			I++;		}				/* Then wait for deactivation */		sysctl_khttpd_stop = 0;		while ( (sysctl_khttpd_stop==0) && (!signal_pending(current)) && (sysctl_khttpd_unload==0) )		{			if (atomic_read(&DaemonCount)<ActualThreads)			{				I=0;				while (I<ActualThreads)				{					if (atomic_read(&Running[I])==0)					{						atomic_set(&Running[I],1);						(void)kernel_thread(MainDaemon,&(CountBuf[I]), CLONE_FS | CLONE_FILES | CLONE_SIGHAND);						(void)printk(KERN_CRIT "kHTTPd: Restarting daemon %i \n",I);					}					I++;				}			}			interruptible_sleep_on_timeout(&WQ,HZ);						/* reap the daemons */			waitpid_result = waitpid(-1,NULL,__WCLONE|WNOHANG);					}						/* The user wants us to stop. So stop listening on the socket. */		if (sysctl_khttpd_stop!=0)			{			/* Wait for the daemons to stop, one second per iteration */			while (atomic_read(&DaemonCount)>0)		 		interruptible_sleep_on_timeout(&WQ,HZ);			StopListening();		}				}		sysctl_khttpd_stop = 1;	/* Wait for the daemons to stop, one second per iteration */	while (atomic_read(&DaemonCount)>0) 		interruptible_sleep_on_timeout(&WQ,HZ);					waitpid_result = 1;	/* reap the zombie-daemons */	while (waitpid_result>0)		waitpid_result = waitpid(-1,NULL,__WCLONE|WNOHANG);			StopListening();			(void)printk(KERN_NOTICE "kHTTPd: Management daemon stopped. \n        You can unload the module now.\n");	MOD_DEC_USE_COUNT;	return 0;}int __init khttpd_init(void){	int I;	MOD_INC_USE_COUNT;		I=0;	while (I<CONFIG_KHTTPD_NUMCPU)	{		CountBuf[I]=I;				I++;	}		atomic_set(&ConnectCount,0);	atomic_set(&DaemonCount,0);		/* Maybe the mime-types will be set-able through sysctl in the future */	   		 	AddMimeType(".htm","text/html"); 	AddMimeType("html","text/html"); 	AddMimeType(".gif","image/gif"); 	AddMimeType(".jpg","image/jpeg"); 	AddMimeType(".png","image/png"); 	AddMimeType("tiff","image/tiff"); 	AddMimeType(".zip","application/zip");	AddMimeType(".pdf","application/pdf"); 	AddMimeType("r.gz","application/x-gtar"); 	AddMimeType(".tgz","application/x-gtar");	AddMimeType(".deb","application/x-debian-package");	AddMimeType("lass","application/x-java");	AddMimeType(".mp3","audio/mpeg");	AddMimeType(".txt","text/plain");		AddDynamicString("..");	AddDynamicString("cgi-bin");	StartSysctl();		(void)kernel_thread(ManagementDaemon,NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);		return 0;}void khttpd_cleanup(void){	EndSysctl();}	module_init(khttpd_init)	module_exit(khttpd_cleanup)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷中文字幕一区三区| 欧美丰满美乳xxx高潮www| 亚洲国产精品99久久久久久久久| 美女被吸乳得到大胸91| 欧美一区二区三区小说| 男男成人高潮片免费网站| 日韩一区和二区| 黄页视频在线91| 国产精品免费观看视频| 99视频一区二区三区| 亚洲精品国产一区二区精华液 | 欧美日韩中字一区| 日本美女视频一区二区| 欧美一区二区视频观看视频| 看电视剧不卡顿的网站| 亚洲国产精品ⅴa在线观看| 欧洲国产伦久久久久久久| 日韩不卡在线观看日韩不卡视频| 精品区一区二区| 成人综合婷婷国产精品久久蜜臀| 国产精品美日韩| 91丨九色丨黑人外教| 亚洲自拍偷拍九九九| 欧美视频一区在线| 奇米四色…亚洲| 欧美在线观看视频一区二区 | 亚洲二区在线视频| 欧美日韩高清不卡| 日本一道高清亚洲日美韩| 精品久久久久99| www.亚洲在线| 午夜精品久久久久久久久久久| 日韩视频免费直播| 国产 欧美在线| 亚洲在线视频一区| 精品欧美乱码久久久久久| 成人黄色小视频在线观看| 亚洲美女免费视频| 欧美日韩五月天| 国产在线不卡一区| 亚洲色图在线播放| 欧美一区二区三区精品| 国产98色在线|日韩| 亚洲国产精品一区二区久久恐怖片| 日韩一区二区三区电影在线观看| 国产高清久久久久| 亚洲影视在线播放| 国产丝袜美腿一区二区三区| 欧美日韩国产精选| 国产精品一二三| 天天色天天爱天天射综合| 日本一区二区免费在线观看视频 | 久久久91精品国产一区二区精品 | 欧美一二三在线| 国产精品一级二级三级| 午夜精品福利一区二区三区av| 91精品国产91久久久久久一区二区| 国产成人丝袜美腿| 日韩中文字幕1| 日韩一区在线看| 26uuu色噜噜精品一区| 欧美日韩在线亚洲一区蜜芽| 国产69精品久久久久毛片| 日本在线不卡一区| 一区二区三区鲁丝不卡| 国产精品久久久久久久岛一牛影视 | 蜜乳av一区二区| 亚洲乱码国产乱码精品精小说| 欧美成人性战久久| 欧美日韩大陆一区二区| 94-欧美-setu| 国产福利91精品一区二区三区| 青青草一区二区三区| 亚洲国产成人高清精品| 亚洲三级理论片| 国产精品久久久久久福利一牛影视| 精品福利一区二区三区| 在线播放中文一区| 欧美视频在线播放| 91久久精品网| 91猫先生在线| 色婷婷精品久久二区二区蜜臀av| 国产成人午夜高潮毛片| 国产综合久久久久影院| 亚洲午夜三级在线| 国产精品国产三级国产| 中文字幕亚洲在| 中文字幕中文字幕在线一区 | av电影天堂一区二区在线观看| 精品一区二区综合| 国产揄拍国内精品对白| 极品瑜伽女神91| 激情图片小说一区| 国产一区二区三区观看| 国产成人精品影视| 国产成人精品三级| 国产激情视频一区二区三区欧美| 国产美女主播视频一区| 韩国av一区二区| 国产风韵犹存在线视精品| 国产麻豆精品在线观看| 国产白丝精品91爽爽久久| 国产**成人网毛片九色| 99久久精品国产观看| 欧美性欧美巨大黑白大战| 欧美色图第一页| 欧美一级久久久| 久久久久久久久久久黄色 | 91精品在线一区二区| 欧美一区国产二区| 欧美亚洲尤物久久| 欧美高清hd18日本| 欧美高清dvd| 欧美成人一区二区三区| 日韩欧美国产1| 国产精品国产三级国产aⅴ中文 | 欧美一级欧美一级在线播放| 久久久精品免费免费| 欧美国产精品专区| 九九九久久久精品| 国产精品66部| 91女人视频在线观看| 5月丁香婷婷综合| 久久欧美一区二区| 亚洲夂夂婷婷色拍ww47| 麻豆久久久久久| 成人夜色视频网站在线观看| 91精品福利视频| 日韩你懂的在线观看| 欧美国产视频在线| 亚洲午夜免费视频| 黄页视频在线91| 欧美视频中文字幕| 国产天堂亚洲国产碰碰| 亚洲成人你懂的| 国产乱子伦视频一区二区三区| 91色乱码一区二区三区| 欧美va在线播放| 亚洲精品中文在线观看| 国产自产2019最新不卡| 欧美午夜不卡在线观看免费| 精品电影一区二区三区| 亚洲成人激情社区| 成人免费高清视频| 日韩欧美在线综合网| **欧美大码日韩| 国产在线观看免费一区| 97精品国产露脸对白| 欧美一二三区精品| 五月天激情综合网| 99国产麻豆精品| 国产欧美综合在线观看第十页| 亚洲国产精品久久久男人的天堂| 成人综合婷婷国产精品久久免费| 欧美一区二区三区在线视频| 一区二区三区欧美激情| 成人污污视频在线观看| 日韩免费性生活视频播放| 中文字幕一区二区三区在线观看| 视频在线观看一区| 成人av集中营| 久久久久国色av免费看影院| 日韩国产欧美三级| 欧美色国产精品| 一二三区精品视频| 91亚洲精品乱码久久久久久蜜桃| 久久久国产一区二区三区四区小说| 天天色天天操综合| 欧美日韩视频在线第一区 | 国产电影一区在线| 久久综合久久久久88| 日本不卡1234视频| 欧美日韩国产在线观看| 亚洲国产欧美在线| 日本大香伊一区二区三区| 国产精品高潮久久久久无| 国产精品99精品久久免费| 国产日韩精品一区| 国产电影精品久久禁18| 91精品国产一区二区三区蜜臀 | 国产亚洲欧美日韩俺去了| 奇米综合一区二区三区精品视频| 91精品国产丝袜白色高跟鞋| 亚洲成人在线免费| 在线不卡a资源高清| 日本不卡一区二区三区高清视频| 在线精品视频小说1| 久久久精品黄色| 美女一区二区三区| 久久久噜噜噜久噜久久综合| 丁香亚洲综合激情啪啪综合| 国产精品久久久久影院亚瑟 | 欧美午夜精品久久久久久超碰| 亚洲资源在线观看| 欧美一区国产二区| 免费久久99精品国产| 日韩美女视频一区二区在线观看| 美女网站色91| 中文字幕欧美区| 91蜜桃视频在线|