对ListenSocket 的研究(三)

磨砺技术珠矶,践行数据之道,追求卓越价值  

回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页

[作者:高健@博客园 luckyjackgao@gmail.com]

 

接着 ListenSocket的研究(二) 一文,进一步进行分析,改动postmaster.c的ServerLoop函数代码如下:

if (selres > 0)                                            
{                                            
    int    i;                              
    for (i = 0; i < MAXLISTEN; i++)                                        
    {                                        
        if (ListenSocket[i] == PGINVALID_SOCKET)
            break;                          
        if (FD_ISSET(ListenSocket[i], &rmask))                                    
        {                                    
            fprintf(stderr, 
        "In ServerLoop, ListenSocket[%d] is dealed ok by FD_ISSET.\n", i); Port *port; port = ConnCreate(ListenSocket[i]); if (port) { BackendStartup(port); StreamClose(port->sock); ConnFree(port); } /*added by gaojian begin*/ }else{ fprintf(stderr,
        "ListenSocket[%d] is dealed by FD_ISSET
          with failed result.\n
", i); /*added by gaojian end*/ } } }

启动服务器端后,显示信息:

ListenSocket[0]:3
ListenSocket[1]:4

然后,再开一个终端运行psql,此时服务器端所属的终端显示:

ListenSocket[0] is deal ok with FD_ISSET
ListenSocket[1] is deal by FD_ISSET with failed result.

也就是说客户端来一个请求的时候,只影响到ListenSocket数组中的一个元素;所以会激活一个backend。再开一个终端,仍然是同样的信息。那么ListenSocekt[1]应该算作备用。

 

[作者:高健@博客园 luckyjackgao@gmail.com]

回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页

 磨砺技术珠矶,践行数据之道,追求卓越价值

posted @ 2012-07-20 13:35  健哥的数据花园  阅读(505)  评论(0编辑  收藏  举报