質問: ソケットの共有について プロセスa, プロセスbがあります。 プロセスaの中でスレッドa, スレッドbを作成します。 スレッドaの中でソケットを作成します。 このソケットでプロセスbと通信します。 スレッドbは作成済みのソケットを使ってプロセスbと 通信できますか? ソケットディスクリプタさえ分かれば、実現できるのかな? ちなみに実現可能な場合には何か注意点があったら 教えて下さい。(mutexが必要とか・・・)
回答: >スレッドbは作成済みのソケットを使ってプロセスbと通信できますか? 出来ます。 言語もosも不明なので詳細は割愛しますが、ソケットはwindowsではioとして、unixとlinuxではストリームとして実装されています。 ioもストリームもディスクプリタがa,bのスレッドから参照可能な位置にあれば共有できます。 基本的にはファイルと同じような動作をしますのでa,bどちらかのスレッドもしくはソケットを独占的に扱うスレッドcを設けた方が実装は簡単です。 両方がバラバラにソケットにアクセスした場合、aが受け取るべきデータをbが受け取ったり、プロセスbにa,bのスレッドの両方から同時にデータ送信を行った場合、データが混信(?)します。 送信時の混信(?)はmutexで防げますがプロセスa側の受信はバッファをpeepして自分宛でなければ書き戻すとか面倒な操作が必要になってしまいます。 ※シングルcpu/シングルコアでは送信時の混信(?)は発生しにくいですが、マルチcpu/マルチコアでは高確率で発生します。 ※ソケットのpeepはosによってはサポートしていない場合があります。