对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索引页
磨砺技术珠矶,践行数据之道,追求卓越价值