開発環境 WindowsXP VC2005 SDK C言語
WinSockをつかったプログラムを作っています。
socket()を呼び出すとSOKET型の値が返ってきますが、
これはどんな場合でもプログラム内でただ1つのユニークな値なのでしょうか?
例えば、1つのパソコンで同じクライアントソフトを10個起動して、
サーバーに接続した場合、サーバー側のプログラムでは、
必ずクライアントソフト10個すべてにユニークな値が割り当てられるんでしょうか。
また、クライアントソフトとサーバーソフトを作ってるんですが、
クライアントがサーバーに接続したときに作成されるSOKETの値には
だいたい3700~3800あたりの値が入っています。
作成されるソケット数には上限があるんでしょうか?
宜しくお願いいたします。
> 例えば、1つのパソコンで同じクライアントソフトを10個起動して、
> サーバーに接続した場合、サーバー側のプログラムでは、
> 必ずクライアントソフト10個すべてにユニークな値が割り当てられるんでしょうか。
サーバがacceptした時点で通信用のsocketがひとつ新たに生成されます。
> また、クライアントソフトとサーバーソフトを作ってるんですが、
> クライアントがサーバーに接続したときに作成されるSOKETの値には
> だいたい3700~3800あたりの値が入っています。
> 作成されるソケット数には上限があるんでしょうか?
まさか無限なはずがない。
επιστημηさん
いつもありがとうございます。
socketが生成されるのはaccept()を呼び出した時点だったんですね。
試したところ、10個すべて同じでした。
> まさか無限なはずがない。
そうですよね。でも上限はいったい何個なんでしょう?
socketの値をしらべると必ず3600代、3700代、3800代の値のどれかが返ってくるんです
が、じゃあつまり最低3600~最高3899の299個しかソケットが作れないんでしょうか・・。
dairygoodsさん
参考になるサイトを教えていただいて、
ありがとうございました。
要するに、1つのスレッドでは64個のソケットが限界のようですね。
それ以上の場合はスレッドを増やす必要があるようです。
επιστημηさん、dairygoodsさん どうもありがとうございました。
> 要するに、1つのスレッドでは64個のソケットが限界のようですね。
必ずしもそうではないです。
WSAEventSelect や select を使う場合は制限があると書いてあります。
dairygoods
あ、そうですね。了解しました。
ご親切にありがとうございます。
すみません。「さん」が抜けました・・