Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42842
  • 博文数量: 27
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 145
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-19 12:09
文章分类
文章存档

2012年(27)

我的朋友

分类:

2012-10-31 11:01:39

main.c(主程序)

web服务器的主要,也就是启动函数。

 

int websvxmain(int argc, char **argv)

功能:goahead web服务器的启动的第一个函数。

说明:

1.       判断命令中有没有-demo,有则,代码中包含/wwwdemo/目录下的页面对应的cgi程序,该目录下是一些例子程序。

2.       分配一个60k的内存空间。

3.       初始化web服务器。

4.       然后进入while循环,在打开的socket数组中寻找是否有一个socket需要处理(socketReady);如果没有,则等待2秒,发现有可读、可写socketsocketSelect)。如果有则进行处理(socketProcess)。对于cgi程序需要进行输出数据到浏览器,释放内存(websCgiCleanup),还进行emfSchedProcess(以后再说)

5.       while循环之外,umclose、关闭web服务器、关闭socket,这些主要是释放分配的内存。

-----------------------------------------------------------------------------------------------------------------

 

static int initWebs(int demo)

功能:初始化web服务器。

说明:

1.       用到的全局变量的初始化,打开sym hash table、打开用户管理,注册UM tables

2.       从配置文件umconfig.txt中恢复um的数据。

3.       获得web服务器所在主机上的ip地址等信息。

4.       确定web服务器的根目录,对于例子程序,根目录是/ata0/webs/wwwdemo,这个只是例子,真正的根目录是/ata0/webs/www.

5.       设置默认的目录为/ata0/webs/www.

6.       设置默认的页面和密码(websSetDefaultPage(T("default.asp"));      websSetPassword(password);),默认页面有用,密码没有用到,没啥用。默认页面主要是当websDefaultHandler处理的url请求时,如果url只是路径,没有页面时,就调用这个页面。

7.       然后建立socketlisten。(websOpenServer

8.       创建几个处理句柄,分别对应认证(websSecurityHandler),gofrom处理(websFormHandler),标准cgi处理(websCgiHandler),pagehtmlcssimage)、asp处理(websDefaultHandler)。

9.       然后是两个例子程序,分别对应goformasp,移植web服务器时,将其注释掉。

10.   然后是用户管理对应的页面的aspgoform程序,移植web服务器时不需要这些。

11.   然后定义一个默认主页面,也就是当用户登陆到web服务器是,输入ip地址,能够自动跳到的页面,也就是更目录“/”时,例如193168.12.12192.168.12.12/。移植时,根据具体情况自己修改。

12.   然后是SIGTERMSIGKILL两个信号的处理程序。

-----------------------------------------------------------------------------------------------------------------

 

static int aspTest(int eid, webs_t wp, int argc, char_t **argv)

功能:一个asp的例子。

说明:也就是/wwwdemo/asptest.asp上对应的asp处理函数。

-----------------------------------------------------------------------------------------------------------------

 

static void formTest(webs_t wp, char_t *path, char_t *query)

功能:一个form例子。

说明:

-----------------------------------------------------------------------------------------------------------------

 

static int websHomePageHandler(webs_t wp, char_t *urlPrefix, char_t *webDir,

       int arg, char_t *url, char_t *path, char_t *query)

功能:主页面处理函数

说明:当输入的只是ip地址,或者有ip地址和根路径“/,跳到该函数定义的页面去。

-----------------------------------------------------------------------------------------------------------------

 

static void websTermSigHandler(int signo)

功能:SIGTERMSIGKILL信号处理函数

说明:主要释放内存。

-----------------------------------------------------------------------------------------------------------------

阅读(343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~