1) Яка різниця між з'єднанням та тайм-аутом зчитування для розеток?
Тайм-аут з'єднання - це час очікування у встановленні початкового з'єднання; тобто завершення рукостискання з'єднання TCP. Час очікування читання - час очікування на очікування читання даних 1 . Зокрема, якщо сервер не надсилає байт <timeout> секунд після останнього байта, буде підвищена помилка очікування читання.
2) Що означає тайм-аут з'єднання, встановлений на "нескінченність"? У якій ситуації він може залишитися в нескінченному циклі? і що може спричинити, що петля нескінченності вмирає?
Це означає, що спроба з'єднання потенційно може блокуватись назавжди. Немає нескінченного циклу, але спроба підключення може бути розблокована іншим потоком, що закриває сокет. ( Thread.interrupt()
Виклик також може зробити трюк ... не впевнений.)
3) Що означає час очікування читання, встановлене на "нескінченність"? У якій ситуації він може залишитися у нескінченному циклі? Що може призвести до того, що нескінченна петля закінчиться?
Це означає, що виклик read
на потік сокета може блокувати назавжди. Знову не існує нескінченного циклу, але його read
можна розблокувати Thread.interrupt()
викликом, закривши сокет і (звичайно) іншим кінцем відправити дані або закрити з'єднання.
1 - Це не ... як думав один з коментаторів ... час очікування того, як довго розетка може бути відкритою, або простоювати.
HttpURLConnection.getResponseCode()
висіли приклад для apprx. на тиждень, поки ми не перезапустили процес. Очевидно, що на стороні JVM не встановлено тайм-аут, а також на стороні ОС Linux не було часу.