码农公社 210.net.cn 210是何含义?10月24日是程序员节,1024 =210、210既
210
之意。
Apache在码农界是比较知名的,它也是目前最接地气、使用最广泛的Web服务器。大家可以从news.netcraft.com/这个网站得到证实。
Apache在功能、效率、开源三个方面对我很有吸引力,但囿于自己的技术水平,无法从Apache庞大的source code里面理清头绪。
懒惰中,冒出自己动手写一个简易实用的Web服务器的主意,在此分享给大家,权当抛砖引玉!
我的实验环境为:
OS: Red Hat Enterprise Linux 5
gcc: 4.1.2
libc: 2.5
editor: Vim
lang: C
阅读该源代码需要以下预备知识:
C语言基础
Linux编程基础
socket编程基础(Linux)
TCP/IP基本原理
HTTP基本原理
下面是第一个版本(0.1 Alpha),实现了WEB 服务器的最基本功能 ,包括以下源文件:
webserver.c----程序入口
init_socket.h
init_socket.c----完成一些WEB服务器的初始化工作
get_time.h get_time.c----获得服务器的时间
http_session.h http_session.c----处理一次HTTP会话
以下是各文件源码:
webserver.c/*
* file:webserver.c
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include"get_time.h"
#include"init_socket.h"
#include"http_session.h"
intmain(intargc,char*argv[])
{
intlisten_fd;
intconnect_fd;
structsockaddr_inserver_addr;
structsockaddr_inclient_addr;
bzero(&server_addr,sizeof(structsockaddr_in));
bzero(&client_addr,sizeof(structsockaddr_in));
if(init_socket(&listen_fd,&server_addr)==-1)
{
perror("init_socket() error. in webserver.c");
exit(EXIT_FAILURE);
}
socklen_taddrlen=sizeof(structsocka