1) В чем разница между соединением и тайм-аутом чтения для сокетов?
Тайм-аут соединения - это тайм-аут при установлении первоначального соединения;т.е. завершение установления соединения TCP.Тайм-аут чтения - это время ожидания чтения данных 1 .В частности, если серверу не удается отправить байт секунд после последнего байта, возникнет ошибка тайм-аута чтения.
2) Что означает тайм-аут соединения, установленный на "бесконечность"?В какой ситуации он может оставаться в бесконечном цикле?и что может привести к тому, что бесконечный цикл умирает?
Это означает, что попытка соединения может потенциально блокироваться навсегда.Не существует бесконечного цикла, но попытка подключения может быть разблокирована другим потоком, закрывающим сокет.(Вызов Thread.interrupt()
также может помочь ... не уверен.)
3) Что означает тайм-аут чтения, установленный на "бесконечность"?В какой ситуации он может оставаться в бесконечном цикле?Что может инициировать завершение бесконечного цикла?
Это означает, что вызов read
в потоке сокета может блокироваться навсегда.И снова бесконечный цикл отсутствует, но read
можно разблокировать с помощью вызова Thread.interrupt()
, закрытия сокета и (конечно) другого конца, отправляющего данные или закрывающего соединение.
1 - Это не ... как думал один комментатор ... тайм-аут на то, как долго сокет может быть открыт или простаивает.