ソケット通信プログラミング(C++)の質問です。先日質問した補足をします。今、クライアントが二つあり、二つに交互に指令を与えたい情況です。私はクライアント1に接続、破棄、クライアント2に接続、破棄・・・を繰り返しているのですが、3分くらい経つと非同期ソケットエラー10053が出てしまいます。bindで登録したクライアントのソケットはどうしたら呼び出せるのでしょうか?また、エラーの出る理由と現在の方法に関係はありますか?ちなみに、サーバーのソケットのプログラムは触れない状況です。よろしくお願いします。
答え:
linux_englishさんの説明を読んで理解しました。
システム構成上クライアント機器だったとしても、ソケットレベルの話では
「クライアント」は発信元を表す意味で使われた方がいいと思います。
ソケットエラー10053は「WSAECONNABORTED」で、自ホスト内でキューを作成するための空きエリアがなくなったため、これ以上の接続をアボートするという意味だと書いてありました。
上記コネクションを張り直す頻度が多すぎるのではないでしょうか。
エラーが出るとき、DOS窓で「netstat -a」などと入力すると、ゴミコネクションが沢山たまっていると思います。
コネクションは張ったままにして、切れたら張り直す位に作ることは駄目でしょうか?
参考URL:
WINSOCKのエラー一覧:
http://homepage1.nifty.com/yito/anhttpd/winsock_error.html
WSAECONNABORTEDの意味について(英文):
http://www.sockets.com/err_lst1.htm#WSAECONNABORTED
補足の質問:
linux_englishさんdokodakanaさん、おかげで何とかうまくいきました。ありがとうございました。ソケット通信そのものは前段階なので今はその後のことに集中しますが、時間ができたら詳しく勉強しようと思います。この質問・回答は役に立ちましたか?
答え:
接続できたことを確認せずに送信などを行っていませんか?
接続に限らず、ライブラリの関数の戻り値をチェックしてみてください。
確認ですが、qjdjqerさんのプログラムは発信側で、接続先が2つあるのですね?
(ソケットレベルでは発信する側をクライアントと呼ぶことが多いので混乱しました。)
普通は受け側のプログラムが制限していない限り
発信側は自分の使用するポート番号を意識しなくてもいいので、
ポート番号が原因ではないのではないでしょうか?
ウェブサイトのユーザーによる情報ポスト、JPQA.comのない保証の正しさ.