Diberikan cuplikan jejak tumpukan ini
Disebabkan oleh: java.net.SocketException: Perangkat lunak menyebabkan koneksi dibatalkan: kesalahan penulisan socket
di java.net.SocketOutputStream.socketWrite0 (Metode Asli)
Saya mencoba menjawab pertanyaan-pertanyaan berikut:
- Kode apa yang melempar pengecualian ini? (JVM? / Tomcat? / Kode saya?)
- Apa yang menyebabkan pengecualian ini dilemparkan?
Mengenai # 1:
Sumber JVM Sun tidak mengandung pesan persis ini, tapi saya pikir Perangkat Lunak teks menyebabkan koneksi dibatalkan: kesalahan penulisan socket berasal dari implementasi asli SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Mengenai # 2
Dugaan saya adalah bahwa hal itu disebabkan ketika klien telah memutuskan koneksi, sebelum mendapatkan respon penuh (misalnya mengirim permintaan, tetapi sebelum mendapatkan respon penuh, ia ditutup / dihentikan / offline)
Pertanyaan:
- Apakah asumsi di atas benar (# 1 dan # 2)?
- Bisakah ini dibedakan dari situasi: "tidak bisa menulis ke klien, karena kesalahan jaringan di sisi server "? atau akankah itu membuat pesan kesalahan yang sama?
- Dan yang paling penting: Apakah ada dokumen resmi (misalnya dari Sun) yang menyatakan hal di atas?
Saya perlu memiliki bukti bahwa tumpukan jejak ini adalah "kesalahan" klien soket, dan tidak ada yang bisa dilakukan server untuk menghindarinya. (kecuali menangkap pengecualian, atau menggunakan SocketOutputStream non Sun JVM, meskipun keduanya tidak benar-benar menghindari fakta bahwa klien telah mengakhiri)
outs.write(audioBytes);
) byte[]
ke OutputStream
. Ketika audio plying dan saat diputar jika pengguna mengklik menu lain (yang mengirim permintaan server) saya mendapat kesalahan yang sama pada konsol. jadi apakah aman untuk mengabaikan pengecualian ini?