• 締切済み

Winsockプログラミング Connectのエラーについて

お世話になっております。 現在、Windowsソケットプログラム(winsock1.1)により、P2Pでの非同期のTCP通信プログラムを組んでます。 そこで、クライアントからサーバーへの同時接続のチェックをするために以下のような処理を行っています。 #関係ありそうな情報のみ載せます。足りなければご質問下さい。 OSはWindowsXP HomeEditionです。 なお、OSによる同時接続制限はBiotというツールにより20000というふうに設定しております。 ・クライアント 1.ソケット3000個用意 2.for文ループ処理によりソケット数分Connectを実行 ・サーバー 1.listenの同時接続最大数は20000に設定 毎回Connect実行時、大体2000回目辺りからエラーが出てきます。 その後、イベントが返って来た時のエラーチェックでも、WSAECONNREFUSED(10061)で「サーバーにより接続が拒否された。」というエラーが検出されます。 結局、接続成功は500~700回ぐらいでした。 この現象に対する対処法や解決法はないでしょうか? 現状では、全てのConnect要求を成功できるようにしたいと思っております。 子プロセスを作成するような方法は時間が無いので考えておりません。 9/18にも同じようなしておりますが、前より詳細を書いて再投稿いたしました。 以上、よろしくお願い致します。

みんなの回答

回答No.2

>500単位で減らしても、失敗することには変わりありませんでした。 >確か、500回中250.1000回中300.のような感じだったと思います。 質問にあるように「接続成功は500~700回」なので、500回中500になりそうですが、成功率がConnect回数によって異なるというのが気になります。 サーバのacceptが間に合わないということではないようですが、accept成功数と一致しているでしょうか? >イベントログ [スタートメメニュー]→[設定]→[コントロールパネル]→[管理ツール]→[イベントビューア] >netstat netstat -n で、 TCP 192.168.0.2:3761 192.168.0.3:10001 ESTABLISHED のようなメッセージが大量に表示されるはずです。 ESTABLISHEDとなっているのがconnect中の1個のポートです。 netstat -n > a.txt としてファイルにリダイレクトすれば調べるのが楽でしょう。 意味は参考URLを…

参考URL:
http://www.atmarkit.co.jp/fwin2k/win2ktips/234netstat/netstat.html
yurision
質問者

お礼

解決法が無いため、妥協する形で進むことにしました。 なので締め切りたいと思います。助言ありがとうございました。

yurision
質問者

補足

ご回答ありがとうございます。 返事が遅れてすみません。 >サーバのacceptが間に合わないということではないようですが、>accept成功数と一致しているでしょうか? 一応、サーバーとクライアントのコネクション成功数は一致しておりました。

回答No.1

Biotは使ったことはないので、思いつくままに。 ・Biotの効果は確認できたのですか。 ・winsock2の使用 ・forで3000回のConnect中、sleepでディレイを入れてみる。  あるいは同期型にしてみる。 ・いきなり3000回でなく、1000,2000と増やしてみる。 ・ファイアウォールの影響 ・WindowsXP HomeEdition  クライアント、サーバ共ですか? ・イベントログにエラーが出ていないか。 ・netstat、パケットモニタの使用。 ・サーバのacceptが間に合わないので、クライアントでタイムアウトになっている? ・自分で管理しているサイトがあれば、ポート80でConnectしてみる。

yurision
質問者

補足

>Biotの効果は確認できたのですか。  確認方法は良くわかりませんが、一応、接続成功数は増えました。 >winsock2の使用  まだ、考えておりません。 >forで3000回のConnect中、sleepでディレイを入れてみる  入れると成功回数は増えますが、あくまで「同時接続」を想定した  処理なので、sleepはなしの方向で・・。 >いきなり3000回でなく、1000,2000と増やしてみる。  500単位で減らしても、失敗することには変わりありませんでした。  確か、500回中250.1000回中300.のような感じだったと思います。 >ファイアウォールの影響  サーバー、クライアント共に切っております。 >WindowsXP HomeEdition >クライアント、サーバ共ですか?  クライアントはHomeEdtionで、サーバーはProfessionalです。 >イベントログにエラーが出ていないか  イベントログというのは?ちなみに、エラーはWSAGETSELECTERRORで  取ってきています。 >netstat、パケットモニタの使用  netstatの使い方はわかりますが、どのように調べたらよいの  でしょうか? >サーバのacceptが間に合わないので、クライアントでタイムアウト >になっている  その可能性もありますが、出てきたエラーは接続拒否なのでどうな  んでしょうか。 >自分で管理しているサイトがあれば、ポート80でConnectしてみる  持っていないです。 以上です。よろしくお願い致します。

関連するQ&A