Postmaster主循环的大致流程

简介:
postmaster.c 中,主循环的大致流程如下:

复制代码
/*                                    
 * Main idle loop of postmaster                                    
 */                                    
static int                                    
ServerLoop(void)                                    
{                                    
    ......                       
    nSockets = initMasks(&readmask);                                
                              
    for (;;)                                
    {                                
        ...                                        
        if (pmState == PM_WAIT_DEAD_END)                            
        {
            ...
        }                            
        else                            
        {
            ...                                                     
            selres = select(nSockets, &rmask, NULL, NULL, &timeout);   
        }                            
        ...                           
                                    
        /* Now check the select() result */                            
        if (selres < 0)                            
        {                            
            if (errno != EINTR && errno != EWOULDBLOCK)                        
            {                        
                ......           
                return STATUS_ERROR;                    
            }                        
        }                            
                                    
        /*                            
         * New connection pending on any of our sockets? If so, fork a child 
         * process to deal with it.                            
         */                            
        if (selres > 0)                            
        {                            
            int            i;            
                                    
            for (i = 0; i < MAXLISTEN; i++)                        
            {                        
                if (ListenSocket[i] == PGINVALID_SOCKET)                    
                    break;                
                                    
                if (FD_ISSET(ListenSocket[i], &rmask))                    
                {                    
                    Port       *port; 
                    port = ConnCreate(ListenSocket[i]);                
                                    
                    if (port)                
                    {                
                        BackendStartup(port);   /*To fork a new backend */         
      
                        StreamClose(port->sock);            
                        ConnFree(port);            
                    }                
                }                    
            }                        
        }                            
                                    
        ......                        
    }                                
}                                    
复制代码
从上面可以看出,基本上是以 C语言的标准select函数 来监听是否有新的连接请求进来。如果有连接请求则调用BackendStartup 函数,开启新的backend 处理连接。

这里面比较令我困惑的是:for (i = 0; i < MAXLISTEN; i++) 循环,对BackendStartup 函数的调用是发生在循环内部。ListenSocket 数组如何理解。需要进一步的研究。








本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/07/20/2600479.html,如需转载请自行联系原作者
目录
相关文章
|
运维 监控 算法
【Linux】查看系统信息
【Linux】查看系统信息
249 0
|
11月前
|
安全 Linux Shell
ssh 远程控制服务
SSH(Secure Shell)是一种用于远程登录的安全协议,相比FTP和Telnet,它提供了更高的安全性,避免了明文传输带来的风险。要使用SSH远程管理Linux系统,需要配置sshd服务。本文介绍了如何克隆Linux服务器、修改网络配置,并通过SSH连接两台服务器,最后在目标服务器上创建一个日志文件。
214 6
|
11月前
链动 2 + 1 商业模式:弊端、解决方案、合法性与玩法
链动2+1模式是一种依托科技和数字技术的新型分销模式,主要通过增加贡献、帮扶机制、换位机制、合伙机制等方式解决团队发展难题,提高粘性和复购率。该模式以销售产品为主,不构成传销,通过设置多种身份和奖励机制,鼓励用户积极参与,提高销售效率。以499元某品牌白酒为例,展示了具体的玩法和奖励分配方式。
仿SOUL社交友附近人婚恋约仿陌陌APP网站源码
仿SOUL社交友附近人婚恋约仿陌陌APP网站源码
383 0
仿SOUL社交友附近人婚恋约仿陌陌APP网站源码
|
存储 安全 生物认证
网络安全强密码策略的重要性
【8月更文挑战第13天】
467 1
|
Cloud Native 安全 物联网
智能家居技术的未来展望云原生时代的技术革新与挑战
【8月更文挑战第23天】随着科技的飞速发展,智能家居已经从科幻小说走入了现实生活。本文将探讨智能家居技术的发展趋势、面临的挑战以及未来的潜力。我们将了解如何通过技术创新,使家居生活变得更加智能和便捷,同时确保用户隐私和数据安全。文章旨在启发读者思考智能家居如何与日常生活更紧密地结合,并探索其在未来社会中的角色。
|
人工智能 自然语言处理
AIGC爱好者社区网站——FlowGPT
【2月更文挑战第9天】AIGC爱好者社区网站——FlowGPT
567 4
AIGC爱好者社区网站——FlowGPT
|
JavaScript 前端开发 Go
Wails简介
Wails简介
453 0
|
人工智能 安全 开发者
大模型安全性评测技术
大模型安全性评测技术
908 1
大模型安全性评测技术
|
自然语言处理 JavaScript 前端开发
万字长文详解Java lambda表达式
详细介绍java lambda的各种使用方式以及lambda的实行原理和序列化原理
51936 9
万字长文详解Java lambda表达式