4.3.2.1 master_avail_listen函数:挂载或卸载回调函数master_avail_event
来源:互联网 发布:质检总局网络培训学院 编辑:程序博客网 时间:2024/06/09 17:39
master_avail_listen用来将回调函数挂载到监听的文件描述符上,或从其上卸载。
由于创建子进程后子进程要进行监听,所以master_avail_listen不会直接进行event_enable_read挂载回调函数,而是根据情况执行event_enable_read或event_disable_readwrite。
/master/master_avail.c124 void master_avail_listen(MASTER_SERV *serv)125 {126 const char *myname ="master_avail_listen";127 int listen_flag;128 time_t now;129 int n;130131 /*132 * Caution: several other master_XXXmodules call master_avail_listen(),133 * master_avail_more() ormaster_avail_less(). To avoid mutual dependency134 * problems, the code below invokes no codein other master_XXX modules,135 * and modifies no data that is maintainedby other master_XXX modules.136 *137 * When no-one else is monitoring theservice's listen socket, start138 * monitoring the socket for connectionrequests. All this under the139 * restriction that we have sufficientresources to service a connection140 * request.141 */142 if (msg_verbose)143 msg_info("%s: %s avail %d total%d max %d", myname, serv->name,144 serv->avail_proc,serv->total_proc, serv->max_proc);145 if (MASTER_THROTTLED(serv) ||serv->avail_proc > 0) {146 listen_flag = 0;147 } else if(MASTER_LIMIT_OK(serv->max_proc, serv->total_proc)) {148 listen_flag = 1;149 } else {150 listen_flag = 0;151 if (serv->stress_param_val != 0) {152 now = event_time();153 if (serv->busy_warn_time <now - 1000) {154 serv->busy_warn_time = now;155 msg_warn("service\"%s\" (%s) has reached its process limit \"%d\": "156 "new clients mayexperience noticeable delays",157 serv->ext_name,serv->name, serv->max_proc);158 msg_warn("to avoid thiscondition, increase the process count "159 "in master.cf orreduce the service time per client");160 msg_warn("seehttp://www.postfix.org/STRESS_README.html for "161 "examples ofstress-adapting configuration settings");162 }163 }164 }
145-164 设置一个标志位listen_flag,用来判断是挂载还是卸载回调函数
master_avail_listen有3个调用点:master_service函数,master_avail_more和master_avail_less函数。
首先一定会通过master_service函数调用,这时由于没有创建子进程,MASTER_THROTTLED(serv) || serv->avail_proc > 0
不成立,listen_flag为1,表示可以挂载master_avail_event回调函数进行进程创建。
如果通过master_avail_more函数调用,则serv->avail_proc> 0成立,卸载回调函数。
如果通过master_avail_less函数调用,当avail_proc不被减小到0时,卸载回调函数,否则挂载回调函数。
165 if (listen_flag &&!MASTER_LISTENING(serv)) {166 if (msg_verbose)167 msg_info("%s: enable events%s", myname, serv->name);168 for (n = 0; n <serv->listen_fd_count; n++)169 event_enable_read(serv->listen_fd[n], master_avail_event,170 (void *) serv);171 serv->flags |= MASTER_FLAG_LISTEN;172 } else if (!listen_flag &&MASTER_LISTENING(serv)) {173 if (msg_verbose)174 msg_info("%s: disable events%s", myname, serv->name);175 for (n = 0; n < serv->listen_fd_count;n++)176 event_disable_readwrite(serv->listen_fd[n]);177 serv->flags &=~MASTER_FLAG_LISTEN;178 }179 }
165-178卸载或挂载回调函数。
0 0
- 4.3.2.1 master_avail_listen函数:挂载或卸载回调函数master_avail_event
- 4.3.2.2 master_avail_event函数:调用master_spawn
- 函数call_user_func(),回调函数
- 钩子函数---回调函数
- 回调函数WindowProc函数
- 成员函数 回调函数
- 回调函数 函数指针
- CallBack函数 回调函数
- CallBack函数 回调函数
- 函数指针回调函数
- onCreat 函数 回调函数
- 函数指针回调函数
- 回调函数 钩子函数
- 回调函数/钩子函数
- 函数指针 回调函数
- 回调函数,函数指针
- 学习回调函数同时引申出用函数参数返回一些值或指针
- 回调函数中调用类中的非静态成员变量或非静态成员函数
- c++实验3-个人所得税计算器
- Docker查看 启动容器
- Shiro学习(8)拦截器机制
- PowerDesigner(四)-业务处理模型
- 第三次实验
- 4.3.2.1 master_avail_listen函数:挂载或卸载回调函数master_avail_event
- Webrtc IOS下载编译文档
- 如何多方位布局程序化购买生态链条?
- KVO实现原理
- javascript:localStorage的兼容性实现
- c++作业2-标准体重,两点距离,模拟ATM
- MySQL数据类型格式及长度
- ORACLE
- Java命令运行错误