10

サーバーとの通信にアンマネージ dll を使用するクライアント アプリケーションがあります。

すべてのネットワーク関連の操作は、管理されていない dll 内で実行されます。サーバーで多くの操作を行った後、クライアントの TCP ポートが不足しています。「netstat -an」を使用してネットワークの状態を確認すると、次の結果が得られます。

...
TCP    192.168.11.55:56048    192.168.10.28:5000     FIN_WAIT_2
TCP    192.168.11.55:56049    192.168.10.28:5000     FIN_WAIT_2
TCP    192.168.11.55:56050    192.168.10.28:5000     FIN_WAIT_2
TCP    192.168.11.55:56051    192.168.10.27:5000     FIN_WAIT_2
TCP    192.168.11.55:56052    192.168.10.28:5000     FIN_WAIT_2
TCP    192.168.11.55:56053    192.168.10.27:5000     FIN_WAIT_2
TCP    192.168.11.55:56054    192.168.10.27:5000     FIN_WAIT_2
TCP    192.168.11.55:56055    192.168.10.27:5000     FIN_WAIT_2
TCP    192.168.11.55:56056    192.168.10.27:5000     FIN_WAIT_2
TCP    192.168.11.55:56057    192.168.10.28:5000     FIN_WAIT_2
TCP    192.168.11.55:56058    192.168.10.27:5000     FIN_WAIT_2
TCP    192.168.11.55:56059    192.168.10.28:5000     FIN_WAIT_2
TCP    192.168.11.55:56060    192.168.10.27:5000     FIN_WAIT_2
...

ポートは、クライアントが閉じられた後にのみ解放されます。

VS プロジェクトをデバッグ モードで実行すると、ポートが不足することはありません。しかし、Release モードで実行している間、それは起こっています。

また、サーバーにもクライアント ソースにもアクセスできません。

FIN_WAIT_2 状態のポートを解放または強制終了するにはどうすればよいですか?

4

2 に答える 2

11

ソケットが FIN_WAIT_2 の場合、ローカル ソケットは閉じられており、リモート ソケットが閉じる要求を送信するのを待っています。このクローズ要求が到着しない場合、ソケットはしばらく FIN_WAIT_2 状態のままになります。

この背後にある理由は、リモート パーティからのクローズ リクエストが遅延し、別のアプリケーションがソケットを再利用した後に到着した場合、その新しい接続が即座に閉じられるためです。

必要に応じてタイムアウトを変更できますが、最終的にアンマネージ dll は TCP シャットダウン シーケンスを完全には実装していません。詳細については、

http://answers.microsoft.com/en-us/windows/forum/windows_7-networking/how-to-close-finwait2-connections-except-reboot/ba2fed9f-8b61-4b71-ab5b-d39dc9a387e3

于 2012-05-21T08:36:19.920 に答える
1

0 bytesクライアントソケットをシャットダウン/閉じると、サーバー側のソケットが読み込まれます。
この時点で、サーバーソケットをシャットダウン/クローズする必要があります。接続は のように表示さTIME_WAITPID0、最終的にはなくなります。

私はそれが得られるのと同じくらい良いと思います。

于 2013-03-25T19:22:35.650 に答える