ConnectionTimeout против SocketTimeout - PullRequest
       27

ConnectionTimeout против SocketTimeout

113 голосов
/ 09 сентября 2011

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

Обычно, когда я делаю это (Тайм-аут в миллисекундах)

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

Не генерируется исключение времени ожидания, и оно работает нормально,однако, когда я делаю следующее,

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

я получаю Исключение Сокета.

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

Ответы [ 2 ]

197 голосов
/ 09 сентября 2011

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

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

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

Если входящий поток останавливается более чем на миллисекунду, у вас истекает время ожидания.

67 голосов
/ 01 декабря 2015

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

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

...