web-dev-qa-db-ja.com

ソケットを開いてLinuxの別のプロセスに渡すことはできますか

Linuxでは、ソケットを開いて別のプロセスにソケットを渡すことは可能ですか?はいの場合、例をどこで見つけられるか教えてもらえますか?

ありがとうございました。

45
n179911

はい、できます。あるプロセスから別のプロセスへのSCM_RIGHTSでsendmsg()を使用します。

_SCM_RIGHTS_-別のプロセスから一連のオープンファイル記述子を送信または受信します。データ部分には、ファイル記述子の整数配列が含まれています。渡されたファイル記述子は、dup(2)で作成されたかのように動作します。

http://linux.die.net/man/7/unix

しかし、それは典型的な使用法ではありません。より一般的なのは、プロセスがその親からソケットを継承する場合です(fork()の後)。閉じられていないファイルハンドル(ソケットを含む)はすべて、子プロセスで使用できます。したがって、子プロセスは親のソケットを継承します。

接続をリッスンするサーバープロセスはデーモンと呼ばれます。これは通常、新しい接続ごとにforkし、新しい要求を処理するプロセスを生成します。典型的なデーモンの例はここにあります:

http://www.steve.org.uk/Reference/Unix/faq_8.html#SEC88

Void process()までスクロールします。

60
jspcal