Linux
inetd 如何將控制權轉移到相應的服務?
inetd是如何將控制權轉移到服務上的,下面是我的理解
- inetd 偵聽中提到的每個埠
/etc/inetd.conf
- 如果客戶端向 inetd 偵聽的埠之一發出請求,則 inetd 通過查看
/etc/inetd.conf
- 它充當多路復用器。
我的疑問在下面
- 請求如何移交給子程序(相應的服務守護程序)?
- inetd 已經在埠上建立了連接,因此子程序不能再次使用該埠,直到 inetd 釋放該埠。如果 inetd 釋放該埠,那麼現有的客戶端連接將被刪除(如果我的理解有誤,請糾正我)。
inetd
偵聽埠,然後將其連接到將處理它的服務的標準輸入、標準輸出和標準錯誤。它是如何做到的
- 在
accept
ing 連接之後,它的一個fd
s 上有一個套接字。- 然後
dup
它將 licatefd
to0
,1
, and2
.- 然後會
fork
。所有文件描述符都將保持打開狀態,除非採取一些措施來關閉它們(因此 0、1 和 2 保持打開狀態)。- 然後子程序將呼叫
exec
,fd
s 仍然保持打開狀態。- 該服務現在正在執行,遠端客戶端連接到 stdin (0)、stdout (1) 和 stderr (2)。
- 服務只需要知道客戶端在這些文件描述符上,而不是
listen
自己做。(我做了一些搜尋,但看不到
inetd
告訴服務程序它是由 . 呼叫的inetd
。我希望有一個命令行參數。)