1. 程式人生 > >併發伺服器程式設計模型

併發伺服器程式設計模型

在併發伺服器程式設計模型中,最簡單的就是父程序監聽外來連線請求,一旦請求到來,父程序fork()子程序處理連線,與外來客戶端進行互動

此時通用的做法是:父程序copy自己的地址空間給子程序,此時子程序擁有與父程序相同的開啟的檔案描述符!即,父子程序都有一個監聽套接字、一個連線套接字。連線建立後,父程序關閉連線套接字,子程序關閉監聽套接字。

我們知道,呼叫close()關閉套接字會導致tcp傳送FIN分節


但是為什麼父子程序關閉這兩個套接字沒有導致連線的斷開?

其實,在每個檔案描述符或者套接字都有一個引用計數機制。只有當它的引用計數變為0的時候才會真正清理和釋放該套接字的資源。

還有一個問題就是,如果父程序從來都不關閉連線套接字那會怎麼辦?

由於任何程序在任何時刻可擁有的開啟著的描述符數量通常是有限制的。如果父程序不關閉連線套接字會導致套接字資源的耗盡,而且,沒有一個客戶連線會被終止。因為這些連線套接字的引用計數值永遠是1,不可能為0.