このスタックトレーススニペットを考える
原因:java.net.SocketException:ソフトウェアが接続を中止しました:
java.net.SocketOutputStream.socketWrite0(Native Method)でのソケット書き込みエラー
私は次の質問に答えようとしました:
- この例外をスローしているコードは何ですか?(JVM?/ Tomcat?/ My code?)
- この例外がスローされる原因は何ですか?
#1について:
SunのJVMソースにはこの正確なメッセージは含まれていませんが、「ソフトウェアによって接続が中止されました」というテキストが表示されると思います。ソケットの書き込みエラーは、SocketOutputStream
。
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
#2について
私の推測では、完全な応答を取得する前にクライアントが接続を終了したときに発生します(たとえば、要求を送信したが、完全な応答を取得する前に、閉じられた/終了した/オフラインになった)。
質問:
- 上記の仮定は正しいですか(#1および#2)?
- これは「サーバー側のネットワークエラーのため、クライアントに書き込むことができませんでした」という状況と区別できますか?それとも同じエラーメッセージが表示されますか?
- そして最も重要なこと:上記について述べた公式文書(Sunなど)はありますか?
このスタックトレースがソケットクライアントの「障害」であることを証明する必要があります。サーバーがそれを回避するためにできることは何もありません。(例外のキャッチ、またはSun JVM以外のSocketOutputStreamの使用を除いて、どちらもクライアントが終了したという事実を実際には回避しません)
outs.write(audioBytes);
)byte[]
にしてOutputStream
。オーディオが鳴っているとき、およびユーザーが他のメニュー(サーバーリクエストを送信する)をクリックすると再生中に、コンソールで同じエラーが発生しました。この例外を無視しても安全ですか?