スレッドや並列プログラミングでプログラマーがしばしばそう簡単ではないことは知っています。なぜ複数のスレッドサーバのdup(2)ソケットを待ちますか?
スレッディングされたサーバーアプリケーションのリッスンソケットでdup(2)を呼び出すことは、比較的容認されていますが、よく知られていません。私は競争状態を避けるために心の安らぎのために「何も共有しない」スレッドの一般原則を理解しています。
私の質問は、カーネルがすでにaccept(2)の戻り値で相互排他を行っている場合、まさに、リスニングソケットをdup(2)するのはどうして面白いのですか?
本当に改善されている場合は、ソケットをdup(2)-ed:bind(2)またはlisten(2)の後にする必要がありますか?
クイック検索でこのプラクティスの言及が見つかりませんでした。私には無意味に見えます。 'dup'は新しい整数ハンドルを作成し、比較的重要でないビットフラグ(またはただ一つ)を複製します。ファイル/ソケットデータの大部分である*オープンファイル記述*は共有されたままです。 –
私はclose(2)競合状態に関連していると思いますか? – thodg
通常、サーバーはリスニングソケットを閉じませんが、何らかの理由で必要な場合は、恐らくそれを捨てることは妥当かもしれません。 –