VC6.0でTCP/IPによるソケット通信のプログラムを作っています。
質問が2つあるのですが、
まず1つ目は、selectの第一引数に何を指定すればいいのかが分かりません。
ディスクリプタの最大値に 1 を足したものを指定します。
という説明があったのですが、
これは、ディスクリプタが3つあった場合、
それぞれのディスクリプタの値が1、3、5だとしたら、
6(5+1)を指定するということなのでしょうか?
2つ目はselectを使う場所なのですが、
acceptをする前に使用するのは分かるのですが、
sendやrecvをする前にもselectを使用するべきなのでしょうか?
わかる方がいましたらよろしくお願いします。
nfds 引数は Windows Socket では未使用 (無視される)
UNIX 系に移植する意図があるなら正しい引数を指定する必要がある
> 6(5+1)を指定するということなのでしょうか?
そーいうこと。
UNIX では通常 stdin/stdout/stderr が自動的にオープンされているので
select(MYFILEHANDLES+3, ...) のような呼び出し方式を良く見るわけだ
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html
> sendやrecvをする前にもselectを使用するべきなのでしょうか?
べき論は述べない。あなたのプログラム次第だから。俺なら使う。
とりあえず tutorial 読むといい
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select_tut.2.html
あとは定番ページを
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/
tetrapodさん、返信ありがとうございます。
nfds 引数の設定の仕方がわかってすっきりしました。
UNIXは考えていないので、無視しようと思います。
sendやrecvをする前にもselectを置くかどうかは、
乗せていただいたHPを参考にしながら、
試行錯誤してみようと思います。
ほんとうにありがとうございました。
ツイート | ![]() |