tinyhttpd简介
一:简介:
tinyhttpd是由J. DavidBlackstone在1999年编写的,实现了一个很简单的web服务器。支持GET和POST方法,总代码量也就在500行左右,可以用来学习HTTP协议和UNIX系统调用。
http://tinyhttpd.sourceforge.net/
二:流程:
首先绑定套接字到本地地址,套接字的端口是由系统分配的,而不是预先设置好的。然后就在一个whilt(1)的死循环中处理到来的链接。也就是先调用accept等待链接,连接到来后,新建一个线程处理该链接。这里仅仅是简单的通过线程来处理链接,因而无法满足大并发的要求,在虚拟机通过webbench测试,仅仅能处理380个左右的并发。
在线程中,解析HTTP请求的方法和URL,目前支持的方法只有GET和POST,如果是其他方法,直接返回给客户端“501 Method Not Implemented”。
根据请求的URL,在htdocs目录中寻找相应的文件,如果未找到,则返回错误信息:"404 NOT FOUND"。
根据请求的URL,要么将文件内容直接返回给客户端,要么执行perl脚本,将客户端的请求发送给perl脚本,然后将执行的结果返回给客户端。
三:细节
1:perror
#include <stdio.h>
void perror(const char *s); #include <errno.h>
const char *sys_errlist[];
int sys_nerr;
int errno;
perror主要是将errno转换为可读的字符串消息,它将消息输出到标准错误输出,首先打印字符串s,其后跟一个冒号和空格,然后就是errno对应的字符串,最后跟一个换行符。
举例如下:
#include<errno.h>
#include<stdio.h> int main(intargc, char **argv)
{
errno = atoi(argv[1]);
perror("the errmsg is ");
}
./10
theerrmsg is : Success
./110
theerrmsg is : No child processes
./119
theerrmsg is : No such device
./1255
theerrmsg is : Unknown error 255
2:SIGPIPE
在调试过程中,遇到一个问题,就是程序有时会莫名其妙的自己停掉,没有任何错误输出。经过跟踪,才发现原来是因为SIGPIPE信号的问题。
《UNPv1》的5.13中说明,当一个进程向某个已经收到RST的套接字执行写操作时,内核向该进程发送一个SIGPIPE信号,而该信号的默认行为是终止进程,因此,进程必须捕获它以免异常的终止。
不论该进程是捕获了该信号并从其信号处理程序返回,还是简单的忽略该信号,写操作都将返回EPIPE错误。
这里,直接将该信号的处理方式设置为SIG_IGN即可。
tinyhttpd简介的更多相关文章
- Tinyhttpd阅读笔记
1.简介 tinyhttpd是一个开源的超轻量型Http Server,阅读其源码,可以对http协议,微型服务器有进一步的了解. 源码链接: 参考博客:tinyhttpd源码分析 2.笔记 ---- ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- HTTPS简介
一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
随机推荐
- Django项目:CRM(客户关系管理系统)--10--04PerfectCRM实现King_admin注册功能02
from django import conf #配置文件print("dj conf:",conf) #配置文件print("dj conf:",conf.s ...
- 五.反馈(Hopfield)神经网络
前馈网络一般指前馈神经网络或前馈型神经网络.它是一种最简单的神经网络,各神经元分层排列.每个神经元只与前一层的神经元相连.接收前一层的输出,并输出给下一层,数据正想流动,输出仅由当前的输入和网络权值决 ...
- Vue--findIndex方法的使用原理
原理: // 根据id得到下标 // 默认去遍历list集合,将集合中的每个元素传入到function的item里, var index = this.list.findIndex(function( ...
- json原生解析
身为新手,在运用网络解析json数据的时候,发现先会用Gson等框架解析json,然后就懒起来学原生解析了,这下在看别人写的demo的时候就尴尬了,一块块的,不懂写什么,气氛十分尴尬. 不多说,先来条 ...
- Redhad的开源Paas平台:OpenShift
参考redHat的官方文章翻译而来:https://openshift.redhat.com/community/wiki/architecture-overview OpenShift Origin ...
- vue-waterfall2 基于Vue.js 瀑布流组件
vue-waterfall2 1.宽度自适应,数据绑定特效(适用于上拉加载更多) 2.自定义程度高 3.使用极为简便,适用于PC/移动端 4.提供resize(强制刷新布局-适用于下拉刷新)/mix( ...
- web服务器与tomcat
web服务器与tomcat 服务器分类: 硬件服务器和软件服务器 web服务器: 提供资源供别人访问 web: 网页的意思,资源. web资源分类: 动态的web资源:内容有可能发生改变的 静态的we ...
- ansible Ansible Galaxy ansible-playbook 安装 使用 命令 笔记 生成密钥 管控机 被管控机 wget epel源
笔记 ansible 安装 与salt对比 相同 都是为了同时在多台机器上执行相同的命令 都是python开发 不同 agent(saltstack需要安装.ansible不需要) 配置(salt配置 ...
- Apache Camel,Spring Boot 实现文件复制,转移 (转)
基本框架 Apache Camel Spring Boot Maven 开发过程 1.新建一个POM(quickstart)项目,在POM文件中添加Camel和Spring Boot的依赖 <p ...
- 纯CSS3实现iOS7扁平化图标
在线演示 本地下载