Windows にサーバー アプリケーションがあり、ローカル ポート (3050) でバインドできず、エラーが発生します。WSAEADDRINUSE - Address already in use.
ただし、SysInternals Utility ( TCPView ) を使用して、そのポートでリッスンしているプロセスがないことを確認しました。
この背後にある理由と、この問題を克服するための回避策を提案してください。
前もって感謝します。
Windows にサーバー アプリケーションがあり、ローカル ポート (3050) でバインドできず、エラーが発生します。WSAEADDRINUSE - Address already in use.
ただし、SysInternals Utility ( TCPView ) を使用して、そのポートでリッスンしているプロセスがないことを確認しました。
この背後にある理由と、この問題を克服するための回避策を提案してください。
前もって感謝します。
このエラー状態は、次の 2 つの条件下で発生します。
1) 別のソケットがすでにそのアドレスにバインドされています
2) そのアドレスにバインドされたソケットが最近閉じられました。
最初のケースでは、問題は同じプログラムでそのポート番号に 2 回バインドしていることだと思います。
2 番目のケースでは、テストの 120 秒前にプログラムの前回の実行が終了またはクラッシュしたと思います。TCPView を実行するまでに、120 秒が経過しています。
基になる C++ コードにアクセスできる場合は、を呼び出す前にソケットsetsockopt()
の引数を使用できる場合があります。これにより、「長引く」前のプログラム実行からのソケットがある場合でも、プログラムは指定されたポートに再バインドできます。SO_REUSEADDR
bind()