Bật code Android của tôi (sử dụng Apache HTTP Client) tôi đã thiết lập các thông số sau:Sự khác nhau giữa ConnectionTimeoutException và SSLException với thông điệp "Connection timed out"
HttpConnectionParams.setConnectionTimeout(params, 30 * SECOND_IN_MILLIS);
HttpConnectionParams.setSoTimeout(params, 30 * SECOND_IN_MILLIS);
Tôi đang kết nối với một HTTPS web-dịch vụ. Trên các mạng chậm, tôi nhận được ConnectionTimeoutException
sau 30 giây dự kiến (và tôi thử lại sau đó); nhưng có "vài" trường hợp (không có mẫu tôi có thể quan sát), tôi nhận được một trong những:
javax.net.ssl.SSLException: Read error: ssl=0xe71160: I/O error during system call, Connection timed out javax.net.ssl.SSLException: Write error: ssl=0xe71160: I/O error during system call, Broken pipe
Tôi có mã này từ SO, mà vẫn còn đang được thử nghiệm:
registry.register(new Scheme("https",
SSLCertificateSocketFactory.getHttpSocketFactory(30 * SECOND_IN_MILLIS, null), 443));
tôi có thể hiểu thời gian chờ của thiết lập kết nối và thời gian chờ của ổ cắm - truy vấn của tôi là chúng tôi có thực sự cần thời gian chờ thứ ba này cho SSL không? Mục đích khác với SO_TIMEOUT như thế nào?
PS: Những ngoại lệ này dường như có ảnh trong khi đọc/ghi dữ liệu - điều này sẽ dẫn đến mất dữ liệu - nhưng tôi cũng không thể quan sát được.