В чем разница между временем ожидания подключения и чтения для сокетов?



3 вопроса:

  1. в чем разница между подключение и читать тайм-аут для сокетов?

  2. Что значит подключение тайм-аут установлен на "бесконечность" означает? В какой ситуации он может оставаться в инфинитивном цикле? и что может вызвать то, что бесконечный цикл умирает?

  3. Что значит читать тайм-аут установлен на "бесконечность" означает? В какой ситуации он может остаться в инфинитивной петле? и что может вызвать то, что бесконечный цикл умирает?

149   2  

2 ответов:

1) в чем разница между временем ожидания соединения и чтения для сокетов?

время ожидания подключения время ожидания в начальной связи; т. е. завершения соединения TCP-соединение. Тайм-аут чтения-это тайм-аут ожидания чтения данных1. В частности, если серверу не удается отправить байт через несколько секунд после последнего байта, будет вызвана ошибка тайм-аута чтения.

2) Какая связь тайм-аут установлен на "бесконечность" означает? В какой ситуации он может оставаться в инфинитивном цикле? и что может вызвать то, что бесконечный цикл умирает?

это означает, что попытка подключения может потенциально заблокировать навсегда. Не существует бесконечного цикла, но попытка подключения может быть разблокирована другим потоком, закрывающим сокет. (A Thread.interrupt() звонок может также сделать трюк ... не уверенный.)

3) Что означает тайм-аут чтения, установленный на "бесконечность"? В какой ситуации может он остается в бесконечном цикле? Что может привести к тому, что бесконечный цикл закончится?

Это означает, что вызов read на сокете поток может блокироваться навсегда. Еще раз нет бесконечного цикла, но read может быть разблокирован с помощью Thread.interrupt() вызов, закрытие сокета, и (конечно) другой конец отправки данных или закрытия соединения.


1 - это не ... как думал один комментатор ... время ожидания того, как долго сокет может быть открыт, или праздный.

Это значения таймаута, применяемые JVM для установления TCP-соединения и ожидания чтения данных из сокета.

Если значение установлено на бесконечность, вы не будете ждать вечно. Это просто означает, что у JVM нет таймаута, и ОС будет отвечать за все таймауты. Однако тайм-ауты в ОС могут быть очень длинными. В какой-то медленной сети я видел тайм-ауты до 6 минут.

даже если вы установите значение таймаута для сокета, он может не работать, если тайм-аут происходит в машинном коде. Мы можем воспроизвести проблему в Linux, подключившись к хосту, заблокированному брандмауэром, или отсоединив кабель на коммутаторе.

единственный безопасный подход для обработки таймаута TCP-это запустить код соединения в другом потоке и прервать поток, когда он занимает слишком много времени.

    Ничего не найдено.

Добавить ответ:
Отменить.