どのように行われますか

どのように行われますか

どのようにイントラネット制御権をサービスに転送します。以下は私が理解したものです。

  • inetdは上記のすべてのポートをリッスンします。/etc/inetd.conf
  • クライアントがinetdがリッスンしているポートの1つに要求をすると、inetdは要求を子プロセスに回転させて要求制御をサービスに転送します。/etc/inetd.conf
  • マルチプレクサとして機能します。

私の質問は次のとおりです

  • リクエストはどのようにサブプロセス(各サービスデーモン)に切り替えられますか?
  • inetdはすでにポートに接続されているため、inetdがポートを解放するまで、子プロセスはそのポートを再利用できません。 inetdがポートを解放すると、既存のクライアント接続が削除されます(誤って理解した場合は訂正してください)。

ベストアンサー1

inetdポートでリッスンし、それを処理するサービスのstdin、stdout、およびstderrに接続します。

どのように行われますか

  • accept接続すると、そのうちの1つにソケットがありますfd
  • その後、にdupコピーされます。fd012
  • それではそうでしょうfork。すべてのファイル記述子は、ファイルを閉じるアクションを取らない限り、開いたままになります(0、1、2は開いたままです)。
  • その後、子プロセスが呼び出され、execsfdはまだ開いています。
  • これでサービスが実行され、リモートクライアントがstdin(0)、stdout(1)、およびstderr(2)に接続します。
  • サービスは、クライアントがこれらのファイル記述子にあることに注意する必要があり、listen独自の操作を実行する必要はありません。

(いくつかの検索をしましたが、呼び出されたinetdサービスプログラムを知らせる内容を見ることができませんinetd。コマンドライン引数があることを願っています。)

おすすめ記事