1) Sự khác biệt giữa thời gian kết nối và thời gian đọc cho ổ cắm là gì?
Thời gian chờ kết nối là thời gian chờ trong việc tạo kết nối ban đầu; tức là hoàn thành bắt tay kết nối TCP. Thời gian chờ đọc là thời gian chờ để đọc dữ liệu 1 . Cụ thể, nếu máy chủ không gửi được byte <thời gian chờ> giây sau byte cuối cùng, lỗi hết thời gian đọc sẽ được đưa ra.
2) Thời gian chờ kết nối được đặt thành "vô cực" nghĩa là gì? Trong tình huống nào nó có thể vẫn còn trong một vòng lặp nguyên bản? và cái gì có thể kích hoạt rằng vòng lặp vô cực chết?
Nó có nghĩa là nỗ lực kết nối có thể có khả năng chặn mãi mãi. Không có vòng lặp vô hạn, nhưng nỗ lực kết nối có thể được bỏ chặn bởi một luồng khác đóng ổ cắm. (Một Thread.interrupt()
cuộc gọi cũng có thể thực hiện mánh khóe ... không chắc chắn.)
3) Thời gian chờ đọc được đặt thành "vô cực" nghĩa là gì? Trong tình huống nào nó có thể vẫn còn trong một vòng lặp vô hạn? Điều gì có thể kích hoạt vòng lặp vô hạn để kết thúc?
Điều đó có nghĩa là một cuộc gọi đến read
trên luồng socket có thể bị chặn vĩnh viễn. Một lần nữa, không có vòng lặp vô hạn, nhưng read
có thể được bỏ chặn bằng một Thread.interrupt()
cuộc gọi, đóng ổ cắm và (tất nhiên) đầu kia gửi dữ liệu hoặc đóng kết nối.
1 - Không phải là ... như một người bình luận nghĩ ... thời gian chờ về thời gian một ổ cắm có thể mở hoặc không hoạt động.
HttpURLConnection.getResponseCode()
treo cho apprx. một tuần cho đến khi chúng tôi bắt đầu lại quá trình. Rõ ràng không có thời gian chờ nào được đặt ở phía JVM và cũng như không có thời gian chờ nào ở phía hệ điều hành Linux.