ConnectionTimeout против SocketTimeout


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

в принципе, когда я это делаю (тайм-аут в миллисекундах)

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

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

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

Я получаю исключение гнезда.

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

2 100

2 ответа:

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

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

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

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

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

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