Windows 2008x64 で C++ アプリケーションの 1 つに問題があります (同じアプリが Windows 2003x64 でも問題なく動作します)。
クラッシュ後、または通常のシャットダウン/再起動サイクルの後でも、コマンドを受信する必要があるポート 82 でソケットを使用すると問題が発生します。
netstat を見ると、アプリケーションが停止してから 10 分以上経過しても、ソケットがまだリッスン状態にあることがわかります (プロセスは確実に実行されていません)。
TCP 0.0.0.0:82 LISTENING
ソケット オプションを REUSEADDR に設定しようとしましたが、私が知る限り、TIME_WAIT 状態のポートへの再接続にのみ影響します。いずれにせよ、この変更は何の違いもないように見えました。
int doReuse = 1;
setsockopt(listenFd, SOL_SOCKET, SO_REUSEADDR,
(const char *)&doReuse, sizeof(doReuse));
この問題を解決する、または少なくとも回避するために私ができることはありますか?
編集:
netstat -an を実行しましたが、取得できるのはこれだけです。
TCP 0.0.0.0:82 0.0.0.0:0 LISTENING
netstat -anb の場合:
TCP 0.0.0.0:82 0.0.0.0:0 LISTENING
[System]
正常にシャットダウンすることは認識していますが、アプリが何らかの理由でクラッシュした場合でも、再起動できる必要があります。問題のアプリケーションは、Windows Sockets API を内部的に使用する社内ライブラリを使用しています。
編集:
どうやらこの問題の解決策はないようです。そのため、開発のためにプロキシ/ツールを使用して回避します。すべての提案に感謝します。