1

皆さん、

私の環境はUbuntu 12.04です。

これは、接続をリッスンしている私の TCP サーバー アプリケーションの擬似コードです。

while(true) {
    int hConn = accept(hMain, NULL, NULL);

    string s = readClient(hConn);
    if (s == "quit") {
        close(hConn);
    }
 }

サーバーの実行中に、ポート nnnn で localhost に telnet します。

$ telnet localhost nnnn
quit
Connection closed by foreign host.
$

サーバーは「quit」を受信すると、クライアント接続を閉じます。これにより、telnet クライアントが適切なメッセージで終了します。

ここまでは順調ですね。

ただし、netstat を実行すると、クライアント接続がまだ有効であることを確認できます。

接続が消えるまで数秒かかります。

これは、サーバー アプリを強制終了しても発生します。

サーバー アプリをもう一度実行すると、ポート「nnnn」がまだ使用されているというエラーが表示されます。

サーバー アプリをもう一度実行するには、数秒待つ必要があります。

私が見逃しているものはありますか?この動作を修正する方法はありますか?

上記の擬似コードには示されていませんが、サーバーを終了するときにソケット hMain を実際に閉じていることに注意してください。

よろしくお願いいたします。

よろしく、
ピーター

4

1 に答える 1

0

TIME_WAITTCP セキュリティ/整合性の理由から、閉じられた TCP 接続が数分間ハングアップすることを示す状態を認識する必要があります。

サーバーの再起動に関する問題は、オプションを使用して解決SO_REUSEADDRできます。

于 2013-06-04T10:13:17.317 に答える