日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Postmaster主循环的大致流程

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 數組如何理解。需要進一步的研究。

總結

以上是生活随笔為你收集整理的Postmaster主循环的大致流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。