アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (4件)

開くとき、socketの後のbindでエラーになっていませんか。

もしそうなら、そういうものです。ソケットを閉じた後、ポート番号が解放されるまでに時間がかかります。WinSockは詳しくありませんが、普通のOSでは2分ぐらいかかる場合もあります。

対策としては、クライアント側ならポート番号のbindを止める。サーバーなら親ソケットを開いたままにしてlisten/acceptを使う。
    • good
    • 0

socket() でオープンしたソケット記述子に対して、SO_REUSEADDR 属性を設定してみては?



(例)
int isock, ist, iopt;

isock = socket(…);
iopt = 1;
ist = setsockopt(isock, SOL_SOCKET, SO_REUSEADDR, (char *)&iopt, sizeof(iopt));
    • good
    • 2

ShutDownを入れるところに問題があるのでは?これではプロトコルがなんなのか、サーバーなのか、クライアントなのか、どういったレベルのソケットを作成しているのかなど分からないところが多いのですが。

そもそもOPENとは?

下のはCAsyncSocket::ShutDownの解説ですが、同じです。


ShutDown はソケットを閉じません。また、Close が呼び出されるまでソケットに結び付けられたリソースも解放しません。アプリケーションは、シャットダウンした後のソケットを再使用できるからといって、それを利用しないでください。特に、Windows ソケットのインプリメントは、そのようなソケットでの Connect はサポートしていません。
    • good
    • 0

プログラミングに関する知識はないので、余り参考にならないかもしれませんが・・。



当たり前ジャンと怒られそうなのですが、
記載されていなかったので確認ベースで・・。

closesocket()の実行前に、shutdown()を実行してるんですよね?

あ~、絶対に怒られる・・。ご容赦を・・m(__)mペコ
この辺は、プロトコルのお約束ですものね。失礼しました。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A