0

以下のようにCentOS 6.2でCソケットプログラムを構築しています。

  1. サーバーはすべてのクライアントからの接続要求をリッスンしています。

  2. 接続が確立されると、クライアントはログ データを単一のサーバーに送信し始めます。

問題は、すべてのクライアントがログ データを同じポートに送信CLOSE_WAITし、クライアントが接続を閉じるときに問題が発生することです。

ウェブをサーフィンしていると、ソケットを閉じて「CLOSE_WAIT」接続を強制終了する必要があることを読みました。これは、サーバーが別のクライアント ソケットからのログ データを受け入れることができなくなったことを意味します。

ポートで特定のセッションを強制終了する方法はありますか? それができない場合は、マルチサーバー リスナーを作成する必要がありますか?

4

1 に答える 1

2

問題は、すべてのクライアントが同じポートにログ データを送信し、クライアントが接続を閉じるときに CLOSE_WAIT が発生することです。

いいえ、そうではありません。CLOSE_WAIT(i) ピアが接続の終了を閉じ、(ii) ローカル システムがローカル アプリケーションが同じことを行うのを待っていることを意味します。これは、すべての TCP サービスが機能する「同じポートへ」とは関係ありません。

「CLOSE_WAIT」接続を強制終了するにはソケットを閉じる必要があることを読みました

正しい。

これは、サーバーが別のクライアント ソケットからのログ データを受け入れることができなくなったことを意味します。

いいえ、そうではありません。これは、リスニングソケットを閉じた場合に発生します。EOS を取得したソケット閉じる必要があります。

ポートで特定のセッションを強制終了する方法はありますか?

ソケットを閉じます。

それができない場合は、マルチサーバー リスナーを作成する必要がありますか?

確かに、あなたはすでにそれをしましたか?

これについては選択の余地がありません。ソケットの読み取り時にストリームの終わりを受け取った場合、ソケットからそれ以上何も読み取ることができません。これまで。

于 2013-10-07T07:22:09.623 に答える