您当前的位置: 首页 >  http

phymat.nico

暂无认证

  • 1浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

thttpd源码分析

phymat.nico 发布时间:2017-12-18 22:24:25 ,浏览量:1

由于最近要自己实现一个嵌入式web服务器,所以开始了对嵌入式web服务器的相关学习。为了使自己对服务器了解更加深入,便找到了开源的服务器进行了相关学习。‘

首先学习的是 thttpd

thttpd 是一个小型的 HTTP 服务器

官方网址:http://www.acme.com/software/thttpd/

下载 version 2.25b 的源码后解压,切换到源码目录,编译步骤为:

./configure

make

thttpd一共有16个源文件:

config.h fdwatch.h libhttpd.h match.h mmc.h tdate_parse.h timers.h version.h

fdwatch.c libhttpd.c match.c mmc.c strerror.c tdate_parse.c thttpd.c timers.c

fdwatch是套接字管理模块

mmc是内存管理模块

timers是定时器管理模块

libhttpd实现http 服务端的处理方法

thttpd实现了主函数

下面是主模块的大体流程图:

main

{

打开系统日志

处理main参数

读取流控配置文件

设置uid

获取当前工作目录

切换到后台模式

创建子进程,父进程结束

获取系统资源信息

注册处理系统信号的函数

初始化定时器资源

初始化HTTP SERVER 对象

创建系统定时器

创建连接表数组

将监听套接字加入select集合

主循环

{

获取套接字集合发生的事件

检查套接字上的发生的具体行为

接收新的连接

处理新的连接

}

销毁http server对象

关闭系统日志

退出

}

mmc模块分析

 

映射文件到内存,如果定义了HAVE_MMAP,使用mmap,否则使用malloc。 mmc_map函数的步骤是: 查找哈希表,如果已经存在于哈希表中,直接从表中取出,然后返回; 否则查找free_maps,如果free_maps可用,直接取出来用,free_maps为空时,malloc一块内存使用; 接下来判断文件大小,大小不为0时,因为定义了HAVE_MMAP,所以使用mmap内存映射文件; 然后把这个Map结构体添加到哈希表中,同时把这个Map添加到全局变量maps的链表头部。

mmc_unmap函数的步骤: 首先在哈希表中查找这个Map结构,如果没有找到,遍历全局变量maps链表寻找; 如果都没有找到或者找到后发现引用计数

关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0523s