ConnectionTimeout против SocketTimeout

У меня проблема с библиотекой, которую я использую, это может быть библиотека, или я могу использовать ее неправильно!

В основном, когда я делаю это (Таймаут в миллисекундах)

_ignitedHttp.setConnectionTimeout(1);  // v short
_ignitedHttp.setSocketTimeout(60000);  // 60 seconds

Исключение исключений тайм-аута генерируется нормально, однако, когда я это делаю:

_ignitedHttp.setConnectionTimeout(60000);  // 60 seconds
_ignitedHttp.setSocketTimeout(1);          // v short

Я получаю исключение Socket.

Итак, мой вопрос: почему я не могу имитировать исключение соединения? Я не понимаю разницу между сокетом и тайм-аутом соединения? В библиотеке здесь (пока еще официально не подтвержден).

Ответ 1

A время ожидания подключения происходит только после запуска TCP-соединения. Обычно это происходит, если удаленная машина не отвечает. Это означает, что сервер был отключен, вы использовали неправильное имя IP/DNS или сетевое подключение к серверу.

A тайм-аут сокета предназначен для контроля непрерывного входящего потока данных. Если поток данных прерван за указанный тайм-аут, соединение считается заторможенным/сломанным. Конечно, это работает только с соединениями, где данные все время принимаются.

Установив тайм-аут сокета на 1, потребуется, чтобы все миллисекунды новых данных были получены (при условии, что вы прочитали блок данных, а блок достаточно большой)!

Если только входящий поток останавливается более чем на миллисекунду, вы запускаете тайм-аут.

Ответ 2

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

Тайм-аут сокета - это тайм-аут при ожидании отдельных пакетов. Это распространенное заблуждение, что тайм-аут сокета - это таймаут для получения полного ответа. Поэтому, если у вас есть тайм-аут сокета 1 секунда и ответ, состоящий из 3 IP-пакетов, где каждый ответный пакет занимает 0,9 секунды, для полного времени отклика 2,7 секунды, тогда не будет тайм-аута.