您的位置:首页 > 编程语言

GoAhead2.5源代码分析之10-web server主程序(main.c)

2011-12-22 00:29 531 查看

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秒,发现有可读、可写socket(socketSelect)。如果有则进行处理(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. 然后建立socket,listen。(websOpenServer)

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

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

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

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

12. 然后是SIGTERM、SIGKILL两个信号的处理程序。

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

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)

功能:SIGTERM、SIGKILL信号处理函数

说明:主要释放内存。

-----------------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: