質問 |
||
| 質問者:upanepa | ソケットの共有について | |
|---|---|---|
困り度:
|
プロセスA, プロセスBがあります。 プロセスAの中でスレッドa, スレッドbを作成します。 スレッドaの中でソケットを作成します。 このソケットでプロセスBと通信します。 スレッドbは作成済みのソケットを使ってプロセスBと 通信できますか? ソケットディスクリプタさえ分かれば、実現できるのかな? ちなみに実現可能な場合には何か注意点があったら 教えて下さい。(mutexが必要とか・・・) |
|
質問投稿日時:08/03/26 00:17 質問番号:3895004 |
||
回答良回答20pt |
|
| 回答者:buriburi3 | >スレッド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によってはサポートしていない場合があります。 |
|---|---|
| 種類:回答 どんな人:専門家 自信:自信あり |
|
| |
回答日時:08/03/26 05:42 回答番号:No.1 |
|
| この回答へのお礼 | ご回答ありがとうございます。 通信を専門で扱うスレッドを設けるtips、 参考にさせていただきます。 |