Linux

inetd 如何將控制權轉移到相應的服務?

  • March 16, 2020

inetd是如何將控制權轉移到服務上的,下面是我的理解

  • inetd 偵聽中提到的每個埠/etc/inetd.conf
  • 如果客戶端向 inetd 偵聽的埠之一發出請求,則 inetd 通過查看/etc/inetd.conf
  • 它充當多路復用器。

我的疑問在下面

  • 請求如何移交給子程序(相應的服務守護程序)?
  • inetd 已經在埠上建立了連接,因此子程序不能再次使用該埠,直到 inetd 釋放該埠。如果 inetd 釋放該埠,那麼現有的客戶端連接將被刪除(如果我的理解有誤,請糾正我)。

inetd偵聽埠,然後將其連接到將處理它的服務的標準輸入、標準輸出和標準錯誤。

它是如何做到的

  • accepting 連接之後,它的一個fds 上有一個套接字。
  • 然後dup它將 licate fdto 0, 1, and 2.
  • 然後會fork。所有文件描述符都將保持打開狀態,除非採取一些措施來關閉它們(因此 0、1 和 2 保持打開狀態)。
  • 然後子程序將呼叫exec, fds 仍然保持打開狀態。
  • 該服務現在正在執行,遠端客戶端連接到 stdin (0)、stdout (1) 和 stderr (2)。
  • 服務只需要知道客戶端在這些文件描述符上,而不是listen自己做。

(我做了一些搜尋,但看不到inetd告訴服務程序它是由 . 呼叫的inetd。我希望有一個命令行參數。)

引用自:https://unix.stackexchange.com/questions/572876