webserver<1>

1. 实现基础的信号处理

  sigaction使用前一定内存清零

2. 实现基础的进程模型

  wait 等待子进程结束

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "common.h"
#include "serversignal.h"

static volatile sig_atomic_t graceful=0;

int main(int argc, char *argv[])
{
signal_init();
int max_worker= 5;

int child = 0;
while(!graceful&&!child){
if(max_worker>0){
switch(fork()){
case -1:
return -1;
break;
case 0:
child =1;
break;
default:
printf("child creat\n");
max_worker--;
break;
}
}else{
int status =0;
if( -1 != wait(&status)){
max_worker++;
printf("parent wakeup\n");
}
}
}

if(!child){
printf("quit kill children first\n");
kill(0, SIGINT);
sleep(20);
}else{
sleep(5);
printf("child quit\n");
}

return 0;
}

void server_graceful_set(int g)
{
if(g>0){
g=1;
}else{
g=0;
}
graceful=g;
}
int server_graceful_get()
{
return graceful;
}

#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "serversignal.h"
#include "server.h"

typedef void (*SIG_HANLDER) (int sig);

struct server_signal{
int sig;
SIG_HANLDER handler;
};

static int signal_handler(int sig);

#define SIG_MAP_GEN(sig, hanlder) {sig, hanlder},

#define SIG_MAP(XX)\
{\
XX(SIGINT, signal_handler)\
XX(SIGHUP, signal_handler)\
XX(0, NULL)\
}\

int signal_init()
{
int index =0;
struct server_signal signals[]=SIG_MAP(SIG_MAP_GEN);

while(signals[index].sig != 0){
struct sigaction act;
memset(&act, 0, sizeof(struct sigaction));
act.sa_handler=(signals[index].handler);
sigemptyset(&act.sa_mask);
sigaction(signals[index].sig, &act, NULL);
index++;
}

return 0;
}

static int signal_handler(int sig)
{
int status=0;
switch(sig){
case SIGINT:
server_graceful_set(1);
break;
case SIGHUP:
printf("sighup\n");
break;
case SIGCHLD:
if(server_graceful_get() == 1){
while(wait(&status)>0){};
}
break;
default:
break;
}
return 0;
}

#ifndef COMMON_H_INCLUDED
#define COMMON_H_INCLUDED

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>

typedef enum {
    true =1,
    false =0
}boolean;

enum logmode{
    SERVER_LOG_FILE=0,
    SERVER_LOG_STDERR
};

struct server{
    enum logmode svlogmode;
};

#define ASSERT(p)    do{        if(!p){            printf("assert error at %s , %d .\n", __FILE__, __LINE__);        }    }while(0)

#endif // COMMON_H_INCLUDED

webserver<1>

时间: 2024-11-05 22:53:02

webserver<1>的相关文章

什么是WEBserver? 经常使用的WEBserver有哪些?

一.什么是WEBserver Webserver能够解析HTTP协议.当Webserver接收到一个HTTP请求,会返回一个HTTP响应,比如送回一个HTML页面.为了处理一个请求Webserver能够响应一个静态页面或图片,进行页面跳转或者把动态响应的产生托付给一些其他的程序比如CGI脚本,JSP脚本,servlets,ASP脚本,server端JavaScript,或者一些其他的server端技术.不管它们(译者注:脚本)的目的怎样,这些server端的程序通常产生一个HTML的响应来让浏览

PHP与webserver【简书看到的】

很久以前,人们造出来一个机器人,它的英文名字叫web server,中文名叫网页服务器.(为了简写,下文称web server为server) server的工作很简单,就是做内容的分发. 初期的sever功能很简单,只能处理静态请求,当客户端请求/index.html的时候,server去文件系统里面找到对应的index.html文件,然后返回给客户端,这个时期的server就像一个仓库管理员,别人要啥,他给啥. 可是这样的机器人很明显不能满足人们的需求,因为sever机器人只能处理静态请求,

【收藏】十大Webserver漏洞扫描工具

如今有很多消息令我们感到Web的危急性,因此,当前怎样构建一个安全的Web环境成为网管员和安全管理员们义不容辞的责任.可是巧妇难为无米之炊,该选择哪些安全工具呢? 扫描程序能够在帮助造我们造就安全的Web网站上助一臂之力,也就是说在黑客"黑"你之前,先測试一下自己系统中的漏洞.我们在此推荐十大Web漏洞扫描程序,供您參考. 1. Nikto 这是一个开源的Webserver扫描程序,它能够对Webserver的多种项目(包含3500个潜在的危急文件/CGI,以及超过900个server

Webserver推送技术

server推送(Server Push) 推送技术的基础思想是将浏览器主动查询信息改为server主动发送信息.server发送一批数据,浏览器显示这些数据,同一时候保证与server的连接.当server须要再次发送一批数据时,浏览器显示数据并保持连接.以后,server仍然能够发送批量数据,浏览器继续显示数据,依次类推. client拉曳(Client Pull) 在client拖曳技术中,server发送一批数据,在HTTP响应或文档头标记中插入指令,让浏览器"在5秒内再次装入这些数据&

Android中如何搭建一个WebServer

对于面向对象的程序设计语言而言,继承和多态是两个最基本的概念.Hibernate 的继承映射可以理解持久化类之间的继承关系.例如:人和学生之间的关系.学生继承了人,可以认为学生是一个特殊的人,如果对人进行查询,学生的实例也将被得到. Hibernate支持三种继承映射策略: 使用 subclass 进行映射:将域模型中的每一个实体对象映射到一个独立的表中,也就是说不用在关系数据模型中考虑域模型中的继承关系和多态. 使用 joined-subclass 进行映射: 对于继承关系中的子类使用同一个表

CXF 简单创建Webserver 例子

最近在弄webserver,因为公司需要用到,来说说,webserver的常用方式吧 1.什么是webservice 1.1   什么是远程调用技术 远程调用数据定义:是系统和系统之间的调用 先说一说常用的webserver 的客户端方式吧 Webservice的四种客户端调用方式 公网服务地址: http://www.webxml.com.cn/zh_cn/index.aspx 1.1   第一种生成客户端调用方式 1.1.1  Wsimport命令介绍 l  Wsimport就是jdk提供的

2017-9-11 - Q - webServer

2 学习项目的脉络把握才是关键,对项目整体的把握,实际上方法的创建只是其次,学到老师对项目的整体把控才是最有价值的.为什么此处直接定义即可,后续不需要考虑不同情况的处理吗,老师测试方法的思路,new一个类,传入参数,调用方法.post情况下,如果加上传参产生的变化不需要考虑吗?如果是,老师是怎样设计函数达到了这样的效果.结合面向对象思想理解程序流程,整个流程实际上就是初始化各类对象,最后返回目标对象的过程. 技巧①,顺之前的处理思路而下,看哪里涉及到了需要做改变如在file.exists那里的判

2017-9-11 - A - webServer

1 * /index.html * /reg?username=fancq&password=123456&nickname= * 在GET请求中,URI可能会有上面两种情况. * HTTP协议中规定,GET请求中的URI可以传递参数,而规则时请求的资源后面以 * "?"分割,之后则为所有要传递的参数,每个参数由: * name=value的格式保存,每个参数之间使用"&"分割. * 这里的处理要求: * 将"?"之前的内

跨域学习笔记3--web.config设置之system.webServer 详细介绍,为网站设置默认文档

自己并不懂,在此先记录下来,留待以后学习... 如何:为 IIS 7.0 配置 <system.webServer> 节2008-06-14 22:26http://technet.microsoft.com/zh-cn/sysinternals/bb763179.aspx 如何:为 IIS 7.0 配置 <system.webServer> 节Web.config 文件中的 system.webServer 节用于指定适用于 Web 应用程序的 IIS 7.0 设置.system

WebServer 之http与httpd(apache)基础介绍

httpd是Apache超文本传输协议(HTTP)服务器的主程序.被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池.说到httpd,首先就要了解HTTP协议,HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议.它可以使浏览器更加高效,使网络传输减少.它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等. 以下是个人对WebSer