2

ServerSocket#acceptIOExceptionからスローされた場合、 は何を示しますか? つまり、接続を受け入れるループがある場合、ここでブロックされます。

Socket client = serverSocket.accept();

受け入れ中の場合catchIOExceptionこれはサーバー ソケットを閉じる必要があることを意味しますか。つまり、何か重大な問題があるか、例外をログに記録して、serverSocket.accept()何も起こらなかったように接続を受け入れるように戻りますか?つまり、サーバー ソケットは完全に機能しています。

4

3 に答える 3

2

これらは、ファイル記述子が不足していることから取得できます。もう 1 つの可能性は、タイムアウトを設定して期限切れになった場合の SocketTimeoutException です。もう 1 つは、サーバー ソケットが非同期的に閉じられたことです。これらの最後のものだけが必然的に致命的です。

于 2013-02-20T20:21:59.213 に答える
1

私が見たのは、accept が例外をスローするケースを 1 つだけ見たことがあります。それは、開いているファイルが多すぎることです。アプリケーションに応じて、待機して再度受け入れに移行するか、閉じる/バインド/受け入れるループを試行するか、失敗する可能性があります。両方の戦略を実装しましたが、常に失敗に終わります。繰り返しになりますが、クライアントの寿命が短い場合は、回復する可能性があります。お客様は長生き...

于 2013-02-20T20:18:52.633 に答える
-1

API ドキュメントから:

接続待機中に I/O エラーが発生した場合は IOException。

これは、ここで例外がスローされた場合、何か問題が発生していることを意味します。たとえば、ポートがビジーである、ネットワーク アダプタが使用できないなどです。そのため、少し待ってから再接続してみてください。これが再び発生した場合は、何もする必要はありません。選択したポートに接続できません。

ポートを変更しますか?住所を変更する?アプリケーションを閉じてエラー メッセージを表示しますか? :(

于 2013-02-20T19:56:59.293 に答える