質問: ### 前提・実現したいこと C言語で、ソケット通信処理を書いています。 複数の接続先から接続されるため、ひとつのポートで待ち受け、接続があったら、accept関数の戻り値を引数にしてスレッドを作成して、複数接続先の受信をうけつけるようにしています。 以下のページのような感じです。 http://blog.majide.com/2009/03/thread-echo-server-program/ さらに受信スレッドの他に、送信用のスレッドを立てたいと思っています。 データ送信の必要が出た際、受信スレッドと同じソケット通信を使用して送信スレッドを都度作成し、処理が終わったらスレッドが消えるようなしくみにしたいです。 実際のコードは、ソケットディスクリプタ、送信データ、送信データ長を送信スレッドのパラメータに設定して、send関数を呼んでいます。 send(sockfd, buf, len); 実際にコードを動かしてみたところ、なんとなく動作しているようには見えています。 ただ、送信スレッドにソケットディスクリプタをパラメータで渡しているため、その直前にソケット接続が切断されて、ソケットディスクリプタが無効になってしまう可能性などもあるのかと思っています。 そこでお聞きしたいのは、このようにソケット通信の受信と送信をスレッドでわけるという処理は現実的ではないのか、ということです。 もし他にいい実現方法がありましたら、なにかヒントなどいただけると助かります。 どうぞよろしくお願いいたします。
回答: ソケットをcloseするまではディスクリプタは無効にはなりません。有効だけどもはや接続してないので送受信どっちの操作も即座にエラーで帰ってくるようになります。 スレッドプログラミングが一般化する前は送受信を別プロセスで行う事例も普通にありましたから、別に送信と受信を別スレッドで行うのもプログラム設計者がやりたければやればいいんではないでしょうか。しかし、送信1回ごとにスレッドを作っては消すのでしょうか?