ネットワークプログラミング相談室 Port29at TECHネットワークプログラミング相談室 Port29 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト189:デフォルトの名無しさん 13/06/01 23:49:25.06 一番大きいfd+1 190:187 13/06/02 00:00:57.31 >>189 レス㌧クス、 select(2)を呼ぶ時点でFD_SETされているのはソケット番号であってディスクリプタ番号ではなく、 ソケット番号がディスクリプタ番号と一致するとは限らないと思うのですが、それでも? 実はバークレーソケットでは一致するのでしょうか (C標準ライブラリのIOBとかの実装と同じで、 ハンドル==配列の添え字、とする実装のが自然とは思えますが、仕様としてどうなの?) 191:デフォルトの名無しさん 13/06/02 00:15:20.65 socket(2), open(2)が返すのはfd。 fdは全部数字。 「ソケット番号」という概念はない。 192:デフォルトの名無しさん 13/06/02 00:50:32.12 >>191 レス㌧クス多分理解しました バークレーソケットの場合は全部fdなので問題は無い、と、 ただ、サーバ側のプログラムでは、クライアントから新規接続cがあった場合、 listenしていたfdをaccept(2)に渡して接続c用の新規fdを取得する結果、 select(2)で待つべきfdが増殖していくと思うのですが、 ということは<一番大きいfd+1 >というのはそのつど更新していくもの? それとも、通信プロセスを起こすタイプのマルチスレッドサーバにすると問題無い(普通はそうする?)のでしょうか… あと関連質問なのですが、 通信「スレッド」を起こすタイプのマルチスレッドサーバではどうすれば良いのでしょう… 子プロセスにfdを渡すのと異なり、親がfdを閉じるわけには行かない しかし親だけがselect(2)するのでは通信「スレッド」を起こす意味がない また、実情はともかく、仕様上はWinsockはスレッドセーフとは謳われていない (Winsock互換の非スレッドセーフな実装が理論上は有り得る) ので、どうプログラミングするのが正しいのかいまいちわからん… 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch