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

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

?? main.c

?? 嵌入式系統(tǒng)設(shè)計與實驗教材二源碼linux內(nèi)核移植與編譯
?? C
字號:
/*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 incoming 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
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区欧美视频| 久久久精品tv| 色综合久久88色综合天天6| 国产成人午夜精品5599| 精品亚洲成a人| 久久国产精品色婷婷| 亚洲精品高清在线| 亚洲私人黄色宅男| 亚洲精品视频观看| 亚洲国产美国国产综合一区二区| 一区二区三区在线观看欧美| 夜夜夜精品看看| 日韩精品每日更新| 蜜桃av一区二区在线观看| 老司机午夜精品| 国产精品一区二区三区99| 成人综合在线视频| 色综合咪咪久久| 欧美色图一区二区三区| 91精品欧美一区二区三区综合在| 日韩一区二区三区视频| 久久综合成人精品亚洲另类欧美| 久久精品视频免费观看| 国产精品久久午夜| 亚洲精品写真福利| 亚洲1区2区3区4区| 精品影院一区二区久久久| 国产电影一区二区三区| 91热门视频在线观看| 欧美日本一区二区三区四区| www激情久久| 中文字幕一区二区三区四区| 亚洲福利一区二区三区| 极品美女销魂一区二区三区| 成人亚洲精品久久久久软件| 欧美三级资源在线| 精品国产一区久久| 自拍偷拍欧美精品| 日本 国产 欧美色综合| 成人小视频免费观看| 欧美在线免费播放| 欧美tickling挠脚心丨vk| 日韩一区在线免费观看| 免费久久精品视频| 99视频在线精品| 91精品国产欧美一区二区| 国产欧美日韩另类视频免费观看| 一区二区欧美在线观看| 国产一区高清在线| 欧美三片在线视频观看| 欧美国产一区二区在线观看| 亚洲成人av一区二区三区| 国产精品一色哟哟哟| 欧美日免费三级在线| 久久青草欧美一区二区三区| 亚洲国产精品视频| 丁香六月久久综合狠狠色| 5858s免费视频成人| 国产精品久久久久久福利一牛影视| 天天色综合成人网| 99久久99精品久久久久久| 日韩欧美一区二区三区在线| 亚洲日本va在线观看| 国产一区福利在线| 91麻豆精品国产91| 亚洲人精品午夜| 韩国成人精品a∨在线观看| 欧美午夜电影一区| **性色生活片久久毛片| 国内精品不卡在线| 欧美日韩色一区| 亚洲天堂a在线| 国产成人免费视频精品含羞草妖精| 欧美日韩亚洲国产综合| 亚洲图片激情小说| 成人免费视频国产在线观看| 欧美不卡一区二区三区| 天天综合色天天| 欧美三级蜜桃2在线观看| 亚洲视频在线观看一区| 国产91富婆露脸刺激对白| 精品伦理精品一区| 日韩极品在线观看| 欧美在线一区二区| 亚洲精品亚洲人成人网| 91丨九色丨黑人外教| 国产精品丝袜在线| 国产精品综合二区| 精品国产一区二区三区av性色| 午夜精品久久久久久久蜜桃app| 91麻豆swag| 中文字幕一区二区不卡| av在线这里只有精品| 国产精品婷婷午夜在线观看| 国产福利精品导航| 国产欧美一区二区在线观看| 国产精品1024久久| 久久精品亚洲精品国产欧美| 国产精品自拍一区| 精品裸体舞一区二区三区| 九九视频精品免费| 欧美精品一区二区在线观看| 美日韩黄色大片| 26uuu久久综合| 国产一区二区久久| 日本一区二区不卡视频| 成人国产精品免费观看| 中文字幕一区不卡| 91天堂素人约啪| 亚洲国产欧美日韩另类综合| 欧美少妇性性性| 日韩电影在线看| 欧美xfplay| 国产一区二区h| 欧美国产禁国产网站cc| www.色综合.com| 一区二区三区蜜桃| 91麻豆精品国产91久久久资源速度| 天堂久久一区二区三区| 日韩精品中文字幕一区二区三区 | 五月综合激情日本mⅴ| 欧美电影一区二区| 国内精品伊人久久久久av一坑 | 亚洲一级在线观看| 欧美丰满美乳xxx高潮www| 日韩av一区二| 久久麻豆一区二区| 色综合一区二区三区| 亚洲午夜电影在线观看| 91精品国产一区二区三区香蕉| 美女一区二区视频| 国产精品女同一区二区三区| 国产精品免费aⅴ片在线观看| 99久久国产综合精品女不卡| 亚洲成人7777| 精品国产乱码久久久久久老虎| 懂色av一区二区在线播放| 亚洲精品国产一区二区三区四区在线| 欧美日韩一本到| 国产高清在线精品| 一区二区免费在线| 欧美成人三级电影在线| 播五月开心婷婷综合| 99久久精品免费| 偷拍日韩校园综合在线| 久久久久久久精| 欧美性受极品xxxx喷水| 久久国内精品视频| 亚洲女与黑人做爰| 日韩欧美一区二区视频| 99久久精品国产观看| 蜜桃视频一区二区三区在线观看| 欧美国产成人在线| 欧美日韩激情在线| 成人精品免费网站| 日韩av中文字幕一区二区| 日韩一区在线播放| 精品裸体舞一区二区三区| 91久久精品一区二区三| 国产一区视频网站| 午夜精品久久久久久| 欧美激情综合网| 欧美一区三区四区| 91一区一区三区| 国内精品自线一区二区三区视频| 亚洲一区二区美女| 国产精品麻豆视频| 日韩女同互慰一区二区| 色激情天天射综合网| 国产不卡在线播放| 蜜臀av一区二区| 亚洲国产sm捆绑调教视频| 国产精品久久久久婷婷| 精品国产一区二区三区不卡| 欧美天堂一区二区三区| jlzzjlzz欧美大全| 韩国视频一区二区| 日韩av电影免费观看高清完整版在线观看| 日韩伦理av电影| 国产精品日韩成人| 精品粉嫩超白一线天av| 欧美三级韩国三级日本三斤| 色综合久久六月婷婷中文字幕| 国产一区二区电影| 精品一区免费av| 免费在线观看一区| 天堂精品中文字幕在线| 亚洲精品中文字幕乱码三区| 国产精品白丝在线| 国产精品少妇自拍| 久久婷婷色综合| 欧美精品一区二区三区久久久| 欧美理论电影在线| 欧美另类z0zxhd电影| 欧美视频一区二区| 欧美日韩一区二区三区在线| 色婷婷久久综合| 91国产免费观看| 欧美激情资源网| 久久久综合精品|