tinyhttpd源码剖析(一)

tinyhttpd源码剖析(一) :概述

目录:
概述
main() 和 startup()
accept_request() 和 get_line()
execute_cgi()
其他函数

简介

tinyhttpd是个超轻量服务器(还有个简易的Client),总代码500行左右,非常适合我这种菜鸡新手学习,于是乎,有了下面学习小注。因为该程序是基于Sparc Solaris 2.6编写,想要在Linux中运行需要进行一些改动

tinyhttpd总体思路

tinyhttpd用于处理GET和POST两种http请求方式。主函数包括一个无限循环等待请求模块,通过创建线程处理请求,实现多线程模型。之后对请求进行method提取、URL提取、构建文件路经、无参GET直接输出文件、有参调用执行CGI脚本、读取http请求(如果POST提取状态码)、建立管道实现父子进程通信。
流程图:

函数作用简介

void *accept_request(void *);  //处理从套接字上监听到的一个http请求
void bad_request(int);  //对错误请求处理
void cat(int, FILE *);  //读取服务器上某个文件写到socket套接字
void cannot_execute(int); //处理执行cgi错误
void error_die(const char *); //把错误信息写到perror
void execute_cgi(int, const char *, const char *, const char *);  //运行cgi脚本
int get_line(int, char *, int); //读取一行报文
void headers(int, const char *);  //http头部写入套接字
void not_found(int);  //返回找不到的请求文件
void serve_file(int, const char *);  //调用cat把服务器文件内容返回给浏览器
int startup(u_short *);  //开启http服务器,包括绑定端口,监听,开启线程处理连接
void unimplemented(int);// 返回给浏览器表明收到的http请求所用方法不被支持

本系列参考博客及书籍:

https://www.cnblogs.com/qiyeboy/p/6296387.html
https://blog.csdn.net/u010487568/article/details/51790935
http://armsword.com/2014/10/29/tinyhttpd-code-analyse/
https://blog.csdn.net/yzhang6_10/article/details/51534409
https://blog.csdn.net/qq_26079093/article/details/90581196
https://blog.csdn.net/jcjc918/article/details/42129311
https://techlog.cn/article/list/10182680
《UNIX网络编程(第3版)》
《Linux/UNIX系统编程手册》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值