Đưa ra đoạn trích dấu vết ngăn xếp này
Nguyên nhân do: java.net.SocketException: Phần mềm gây ra hủy kết nối: lỗi ghi socket
tại java.net.SocketOutputStream.socketWrite0 (Phương thức gốc)
Tôi đã cố gắng trả lời các câu hỏi sau đây:
- Mã nào đang ném ngoại lệ này? (JVM? / Tomcat? / Mã của tôi?)
- Điều gì gây ra ngoại lệ này được ném?
Về # 1:
Nguồn JVM của Sun không chứa thông báo chính xác này, nhưng tôi nghĩ rằng văn bản Phần mềm gây ra hủy bỏ kết nối: lỗi ghi socket là từ bản triển khai gốc của SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Về # 2
Tôi đoán là nó xảy ra khi máy khách đã chấm dứt kết nối, trước khi nhận được phản hồi đầy đủ (ví dụ: đã gửi yêu cầu, nhưng trước khi nhận được phản hồi đầy đủ, nó đã bị đóng / chấm dứt / ngoại tuyến)
Câu hỏi:
- Các giả định trên có đúng không (# 1 và # 2)?
- Điều này có thể được phân biệt với tình huống: "không thể ghi vào máy khách, do lỗi mạng ở phía máy chủ " không? hoặc sẽ làm cho thông báo lỗi tương tự?
- Và quan trọng nhất: Có tài liệu chính thức (ví dụ từ Mặt trời) nêu rõ những điều trên không?
Tôi cần phải có một bằng chứng rằng dấu vết ngăn xếp này là "lỗi" của máy khách socket và không có gì mà máy chủ có thể làm để tránh nó. (ngoại trừ việc bắt ngoại lệ hoặc sử dụng SunOVM SocketOutputStream không phải Sun, mặc dù cả hai đều không thực sự tránh thực tế máy khách đã chấm dứt)
outs.write(audioBytes);
) byte[]
vào OutputStream
. Khi âm thanh bị méo và trong khi phát nếu người dùng nhấp vào bất kỳ menu nào khác (gửi yêu cầu máy chủ), tôi cũng gặp lỗi tương tự trên bảng điều khiển. Vì vậy, nó có an toàn để bỏ qua ngoại lệ này?