Winsockのselectの使用方法

解決


ウォーター  2007-04-18 01:13:11  No: 64933

VC6.0でTCP/IPによるソケット通信のプログラムを作っています。

質問が2つあるのですが、

まず1つ目は、selectの第一引数に何を指定すればいいのかが分かりません。
ディスクリプタの最大値に 1 を足したものを指定します。
という説明があったのですが、
これは、ディスクリプタが3つあった場合、
それぞれのディスクリプタの値が1、3、5だとしたら、
6(5+1)を指定するということなのでしょうか?

2つ目はselectを使う場所なのですが、
acceptをする前に使用するのは分かるのですが、
sendやrecvをする前にもselectを使用するべきなのでしょうか?

わかる方がいましたらよろしくお願いします。


tetrapod  2007-04-18 18:08:52  No: 64934

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/


ウォーター  2007-04-18 23:26:57  No: 64935

tetrapodさん、返信ありがとうございます。

nfds 引数の設定の仕方がわかってすっきりしました。
UNIXは考えていないので、無視しようと思います。

sendやrecvをする前にもselectを置くかどうかは、
乗せていただいたHPを参考にしながら、
試行錯誤してみようと思います。

ほんとうにありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加