//start from the very beginning,and to create greatness
//@author: Chuangwei Lin
//@E-mail:979951191@qq.com
//@brief: SHTTPD错误处理的实现
#include "lcw_shttpd.h"
//错误代码定义如下
enum
{
ERROR301, ERROR302, ERROR303, ERROR304, ERROR305, ERROR307,
ERROR400, ERROR401, ERROR402, ERROR403, ERROR404, ERROR405, ERROR406,
ERROR407, ERROR408, ERROR409, ERROR410, ERROR411, ERROR412, ERROR413,
ERROR414, ERROR415, ERROR416, ERROR417,
ERROR500, ERROR501, ERROR502, ERROR503, ERROR504, ERROR505
};
//全局错误信息结构体
struct error_mine
{
int error_code;//错误代码
char *content;//错误信息
char *msg;//含义
int status;//状态
};
//全局错误信息数组
struct error_mine _error_http[]=
{
{ERROR301, "Error: 301", "永久移动", 301},
{ERROR302, "Error: 302", "创建", 302},
{ERROR303, "Error: 303", "观察别的部分", 303},
{ERROR304, "Error: 304", "只读", 304},
{ERROR305, "Error: 305", "用户代理", 305},
{ERROR307, "Error: 307", "临时重发", 307},
{ERROR400, "Error: 400", "坏请求", 400},
{ERROR401, "Error: 401", "未授权的", 401},
{ERROR402, "Error: 402", "必要的支付", 402},
{ERROR403, "Error: 403", "禁用", 403},
{ERROR404, "Error: 404", "没找到", 404},
{ERROR405, "Error: 405", "不允许的方式", 405},
{ERROR406, "Error: 406", "不接受", 406},
{ERROR407, "Error: 407", "需要代理验证", 407},
{ERROR408, "Error: 408", "请求超时", 408},
{ERROR409, "Error: 409", "冲突", 409},
{ERROR410, "Error: 410", "停止", 410},
{ERROR411, "Error: 411", "需要的长度", 411},
{ERROR412, "Error: 412", "预处理失败", 412},
{ERROR413, "Error: 413", "请求实体太大", 413},
{ERROR414, "Error: 414", "请求-URI太大", 414},
{ERROR415, "Error: 415", "不支持的媒体类型",415},
{ERROR416, "Error: 416", "请求的范围不满足",416},
{ERROR417, "Error: 417", "期望失败", 417},
{ERROR500, "Error: 500", "服务器内部错误", 500},
{ERROR501, "Error: 501", "不能实现", 501},
{ERROR502, "Error: 502", "坏网关", 502},
{ERROR503, "Error: 503", "服务不能实现", 503},
{ERROR504, "Error: 504", "网关超时", 504},
{ERROR505, "Error: 505", "HTTP版本不支持", 505}
}; void Error_400(struct worker_ctl* wctl)
{
;
} void Error_403(struct worker_ctl* wctl)
{
;
} void Error_404(struct worker_ctl* wctl)
{
;
} void Error_505(struct worker_ctl* wctl)
{
;
} /******************************************************
函数名:GenerateErrorMine(struct worker_ctl * wctl)
参数:
功能:错误类型生成
*******************************************************/
int GenerateErrorMine(struct worker_ctl * wctl)
{
struct error_mine *err = NULL;//错误类型
int i = 0;
//轮询查找类型匹配的错误类型
for(err = &_error_http[i];err->status != wctl->conn.con_res.status;i++);//这句感觉怪怪的,如果一直找不到 if(err->status != wctl->conn.con_res.status)
{
err = &_error_http[0]; //没有找到的错误类型为第一个
}
//构建信息头部
snprintf(wctl->conn.dres, sizeof(wctl->conn.dres),
"HTTP/%lu.%lu %d %s\r\n"
"Content-Type:%s\r\n"
"Content-Length:%d\r\n"
"\r\n"
"%s",
wctl->conn.con_req.major,
wctl->conn.con_req.minor,
err->status,
err->msg,
"text/plain",
strlen(err->content),
err->content); wctl->conn.con_res.cl = strlen(err->content);//内容长度
wctl->conn.con_res.fd = -1;//无文件可读
wctl->conn.con_res.status = 400;//错误代码 return 0;
}

一个简单的wed服务器SHTTPD(6)———— SHTTPD错误处理的实现的更多相关文章

  1. 一个简单的wed服务器SHTTPD(9)————main函数文件,Makefile,头文件

    主函数: #include "lcw_shttpd.h" //初始化时服务器的默认配置 extern struct conf_opts conf_para= { "/us ...

  2. 一个简单的wed服务器SHTTPD(1)————命令行和文件配置解析

    开始学习<LInux网络编程>中的综合案例,虽然代码书上有,还是自己打一下加深理解和印象. 主要有两个函数,完成命令行的解析,另一个实现配置文件的解析,注释还是比较丰富的哦. //star ...

  3. 一个简单的wed服务器SHTTPD(5)————服务器SHTTPD请求方法解析

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  4. 一个简单的wed服务器SHTTPD(4)————SHTTPD支持CGI的实现

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  5. 一个简单的wed服务器SHTTPD(3)————SHTTPD多客户端支持的实现

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  6. 一个简单的wed服务器SHTTPD(7)———— SHTTPD内容类型的实现

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  7. 一个简单的wed服务器SHTTPD(8)———— URI分析

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  8. 一个简单的wed服务器SHTTPD(2)———— 客户端请求分析

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  9. 自己动手模拟开发一个简单的Web服务器

    开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...

随机推荐

  1. spring boot 学习(一)——在idea建立第一个spring boot项目

    1.打开idea->点击file->点击new->点击project->点击Spring Initializr->点击default 2.这是springboot的启动类 ...

  2. 【Mongodb】视图 && 索引

    准备工作 准备2个集合的数据,后面视图和索引都会用到1个订单集合,一个收款信息集合 var orders = new Array(); var shipping = new Array(); var ...

  3. PHP获取当天、本周、本月、本季度、本年度时间

    function get_date($date, $t = 'd', $n = 0) { if ($t == 'd') { $firstday = date('Y-m-d 00:00:00', str ...

  4. scala_spark实践2

    参考:jianshu.com/p/9d2d225c1951 监听socket获取数据,代码如下:这里使用nc -lk 9999 在ip为10.121.33.44的机器上发送消息 object Sock ...

  5. python3(九) Section

    # list或tuple的部分元素 L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] # -----------------传统方法 print([L[ ...

  6. Java入门系列之线程池ThreadPoolExecutor原理分析思考(十五)

    前言 关于线程池原理分析请参看<http://objcoding.com/2019/04/25/threadpool-running/>,建议对原理不太了解的童鞋先看下此文然后再来看本文, ...

  7. ffmpeg使用ss与t参数对视频进行剪辑

    ffmpeg能够实现对视频进行剪辑操作,ss为指定视频剪切开头的起始时间,t制定视频的总长度,ss与t的单位均为:秒. ffmpeg -ss 7200 -i 1080p.mp4 -c copy -t ...

  8. 解决xcode ***is missing from working copy

    这是由于SVN置顶文件导致的,cd 至项目根目录 命令行 输入 find . -type d -name .svn | xargs rm -rf

  9. 2019-07-28【机器学习】无监督学习之聚类 DBSCAN方法及其应用 (在线大学生上网时间分析)

    样本: import numpy as np import sklearn.cluster as skc from sklearn import metrics import matplotlib.p ...

  10. 使用Docker快速搭建PHP开发环境

    最近有个同事找过来,希望我对在很早之前写的一个PHP网站上增加一些功能,当时开发使用xampp构建的本地开发环境,但是现在我的笔记本电脑已经更新,没有当时的开发环境.本着尽量不往电脑上装无用软件的原则 ...