开源开源,说好的开源就要从今天开始了。首先从一个简单的开始:Tinyhttpd。
Tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有500多行,附带一个简单的Client,可以通过阅读这段代码理解一个Http Server的本质。
源码下载地址:https://github.com/EZLippi/Tinyhttpd
另附一个可以参考的博文:【源码剖析】tinyhttpd —— C 语言实现最简单的 HTTP 服务器
直接编译报错,需要修改下 Makefile:
all: httpd client
LIBS = -lpthread #-lsocket
httpd: httpd.c
gcc -g -W -Wall $^ -o $@ $(LIBS)
client: simpleclient.c
gcc -W -Wall $^ -o $@
clean:
rm httpd
其实就是修改了下顺序。。。然后 make 成功。
参照 main -> startup -> accept_request -> execute_cgi 顺序阅读代码,在通晓主要工作流程后再仔细把每个函数的源码看一看。
1、首先是 main 函数,该函数是服务器端的常规代码,创建一个用来监听的 sockfd。在监听的过程中每建立一个连接,就创建一个线程去处理。
int main(void)
{
int server_sock = -1;
u_short port = 4000;
int client_sock = -1;
struct sockaddr_in client_name;
int client_name_len = sizeof(client_name);
pthread_t newthread;
/*在对应端口建立 httpd 服务*/
server_sock = startup(&port);
printf("httpd running on port %d\n", port);
while (1)
{
/*套