前面说过Thttpd.c这个文件是整个Thttpd的主要的控制部分下面来将一下Thttpd.c文件中的主要函数以及这些函数的功能。
(1)static void handle_term( int sig )
对于收到SIGTERM信号的处理,释放申请的资源,向syslog输出日志信息,退出程序。
(2)static void handle_chld( int sig )
对于收到SIGCHLD信号的处理,更新当前使用的cgi的数量。忽略进程错误时的错误码为EINTR或EAGAIN的错误。
(3)static void handle_hup( int sig )
对于收到SIGHUP信号的处理,设置got_hup的值为1,当got_hup的值为1的时候将会调用re_open_logfile()函数。
(4)static void handle_usr1( int sig )
对于收到SIGUSR1信号的处理,对于当前的连接数量为0时,释放服务器申请的资源,向syslog输出日志信息,退出程序。
(5)static void handle_usr2( int sig )
对于收到SIGUSR2信号的处理,调用logstats函数
(6)static void handle_alrm( int sig )
对于收到SIGALRM信号的处理,检测看门狗状态标志对于 看门狗标志没有被置位将会调用abort函数,设置下一次闹钟时间。
(7)static void re_open_logfile( void )
对于用户没有配置日志文件参数或者服务器没有初始化将会直接退出,反之对日志文件进行覆盖处理。
(8)int main( int argc, char** argv )
整个应用程序的主程序,将会根据传入的参数更新服务器的配置参数,设置信号处理函数,初始化服务器,循环执行 根据连接的文件描述符的状态进行处理。
(9)static void parse_args( int argc, char** argv )
根据用户输入的命令,设置服务器相关的参数值
(10)static void usage( void )
打印配置命令的设置项,退出程序,在输入的命令有错时将会被调用。
(11)static void read_config( char* filename )
读取用户的配置文件来初始化服务器的相关参数
(12)static void value_required( char* name, char* value )
告知用户此命令还需要参数,并退出程序
(13)static void no_value_required( char* name, char* value )
告知用户此命令不需要参数,并退出程序
(14)static char* e_strdup( char* oldstr )
创建一个新的空间,空间的内容为oldstr的内容并返回此空间的地址
(15)static void lookup_hostname( httpd_sockaddr* sa4P, size_t sa4_len, int* gotv4P, httpd_sockaddr* sa6P, size_t sa6_len, int* gotv6P )
根据配置初始化IPV6或者IPV4的网络参数的配置。
(16)static void read_throttlefile( char* tf )
读取流量限制文件,对相关的参数进行初始化。
(17)static void shut_down( void )
获取当前的时间,调用logstats函数输出服务器各个部分的参数状态信息,关闭所有为空闲的连接,释放连接资源,释放服务器资源,释放内存映射资源,释放计时器资源,释放连接对象,释放流量限制资源。
(18)static int handle_newconnect( struct timeval* tvP, int listen_fd )
对于有新的连接请求的处理,判断当前是否有可以使用的连接供新的连接使用,对于有新的连接可以使用初始化连接参数更新当前使用的连接数量,设置此连接的状态为读取状态。
(19)static void handle_read( connecttab* c, struct timeval* tvP )
请求处理函数,读取请求数据并对请求进行分析和处理设置此连接的状态为发送状态。
(20)static void handle_send( connecttab* c, struct timeval* tvP )
请求回送处理函数,将需要发送的数据发送给请求端,并根据数据是否写成功进行处理。
(21)static void handle_linger( connecttab* c, struct timeval* tvP )
异常处理函数,再次读取数据对于读取数据失败但是错误码为EINTR或EAGAIN退出以后将会继续执行异常处理,对于其他错误,将会关闭连接
(22)static int check_throttles( connecttab* c )
根据传入的连接对象,检测是否有匹配的流量限制项与其对应如果有设置其对应的参数
(23)static void clear_throttles( connecttab* c, struct timeval* tvP )
设置各个流量限制处理的状态为不工作状态
(24)static void update_throttles( ClientData client_data, struct timeval* nowP )
更新流量限制表中的所有配置项,同时更新所有处于连接状态的连接的流量限制参数
(25)static void finish_connection( connecttab* c, struct timeval* tvP )
调用httpd_write_response函数写回送数据,调用clear_connection函数清除连接状态
(26)static void clear_connection( connecttab* c, struct timeval* tvP )
释放连接使用的所有资源,对于处于唤醒状态的释放为其创建的唤醒定时器,对于连接状态处于异常状态的释放为其创建的异常处理定时器,释放连接资源。
(27)static void really_clear_connection( connecttab* c, struct timeval* tvP )
真正的释放连接资源,从select中删除可处理项,关闭连接,设置此项连接为未使用状态
(28)static void idle( ClientData client_data, struct timeval* nowP )
处理请求,发送回送,异常处理程序是否超时,对于超时的进行超时处理
(29)static void wakeup_connection( ClientData client_data, struct timeval* nowP )
对于设置唤醒操作的清除唤醒计时器,对于处于发送状态的连接继续发送数据。
(30)static void linger_clear_connection( ClientData client_data, struct timeval* nowP )
异常清除程序,对于此连接处于异常状态清除异常处理计时器同时真正的释放连接
(31)static void occasional( ClientData client_data, struct timeval* nowP )
定时清理不使用的内存映射和定时器更新看门狗状态
(32)static void show_stats( ClientData client_data, struct timeval* nowP )
调用logstats函数
(33)static void logstats( struct timeval* nowP )
在日志文件中输出服务器,http,内存管理,定时器,网络套接字的状图
(34)static void thttpd_logstats( long secs )
输出http服务器的状态当前连接数,使用内存,每秒字节数等信息
作者:jifukui
来源:CSDN
原文:https://blog.csdn.net/jifukui/article/details/90633452
版权声明:本文为博主原创文章,转载请附上博文链接!