1

現在リッスンおよびフォーク モードで動作する C ネットワーク ソフトウェアを使用しています。サーバーソケットでリッスンしており、着信接続を受け入れます。次に、新しく受け入れられたソケットを提供するコア サーバー関数を呼び出します。

現在、そのソフトウェアを xinetd の背後でも動作させようとしています (ランタイム パラメータによっては)。受け入れられたソケットの代わりにファイル記述子 0 を提供するコア サーバー関数を直接呼び出そうとしましたが、この方法は機能しません。プログラムは SIG_PIPE で即座に停止します。

そのような行動に明らかな理由はありますか?私のコア関数は、いくつかの低レベルのソケット呼び出しとシグナル処理を実行します。それは xinetd の背後で動作するはずですか?

4

1 に答える 1

1

確実ではありませんが、ソケット ハンドルで実行できるすべての操作が通常のファイル ハンドルでも機能するわけではありません。まず、標準入力に書き込むことはできません。また、一部のシステムコールにはおそらくソケットが必要recv()です。

編集

別の可能性: サーバー プロセスは、起動時に stdin を閉じますか?

于 2011-04-20T10:59:18.237 に答える