• ベストアンサー

ソケットのクローズについて

SOCKETのCLOSE直後のOPENが正しく動作しません。お力をお貸しください。 環境:WinXP 言語:C 事象:1回目はうまく動作しますが、2回目以降のOPEN処理がエラーとなってしまう。 しばらく待つ(15秒ほど)と正しくOPENされます。 CLOSEとOPENのどちらに問題があるのでしょうか? SOCKETのCLOSEに多少時間がかかるものなのでしょうか?またその時間はどれくらいなのでしょうか? 宜しくお願い致します。 ※CLOSE:closesocket関数 shutdown関数を使用

質問者が選んだベストアンサー

  • ベストアンサー
  • furlong
  • ベストアンサー率50% (17/34)
回答No.2

開くとき、socketの後のbindでエラーになっていませんか。もしそうなら、そういうものです。ソケットを閉じた後、ポート番号が解放されるまでに時間がかかります。WinSockは詳しくありませんが、普通のOSでは2分ぐらいかかる場合もあります。 対策としては、クライアント側ならポート番号のbindを止める。サーバーなら親ソケットを開いたままにしてlisten/acceptを使う。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • e101tre
  • ベストアンサー率38% (7/18)
回答No.4

socket() でオープンしたソケット記述子に対して、SO_REUSEADDR 属性を設定してみては? (例) int isock, ist, iopt; isock = socket(…); iopt = 1; ist = setsockopt(isock, SOL_SOCKET, SO_REUSEADDR, (char *)&iopt, sizeof(iopt));

すると、全ての回答が全文表示されます。
  • ShaneOMac
  • ベストアンサー率39% (356/898)
回答No.3

ShutDownを入れるところに問題があるのでは?これではプロトコルがなんなのか、サーバーなのか、クライアントなのか、どういったレベルのソケットを作成しているのかなど分からないところが多いのですが。そもそもOPENとは? 下のはCAsyncSocket::ShutDownの解説ですが、同じです。 > ShutDown はソケットを閉じません。また、Close が呼び出されるまでソケットに結び付けられたリソースも解放しません。アプリケーションは、シャットダウンした後のソケットを再使用できるからといって、それを利用しないでください。特に、Windows ソケットのインプリメントは、そのようなソケットでの Connect はサポートしていません。 >

すると、全ての回答が全文表示されます。
  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.1

プログラミングに関する知識はないので、余り参考にならないかもしれませんが・・。 当たり前ジャンと怒られそうなのですが、 記載されていなかったので確認ベースで・・。 closesocket()の実行前に、shutdown()を実行してるんですよね? あ~、絶対に怒られる・・。ご容赦を・・m(__)mペコ この辺は、プロトコルのお約束ですものね。失礼しました。

すると、全ての回答が全文表示されます。

関連するQ&A