0

Учитывая код:Как обрабатывается URLConnection.connectionTimeout?

HttpURLConnection huc = (HttpURLConnection) new URL(url).openConnection(); 
huc.setConnectTimeout(10000); 
huc.connect(); 

как именно тайм-аут соединения обрабатывается? Какой-то HTTP-заголовок установлен или что? Или состояние соединения проверяется в цикле для connectionTimeout времени?

Я пытался найти его в исходном коде, но есть только long connectionTimout поле ...

ответ

2

Думай о нем, как:

Внутри connect первый параллельный таймер запускается для тайм-аута соединения , Если таймер заканчивается до того, как установлено фактическое соединение (получен ответ), тогда сбой.

В действительности на большинстве платформ операционная система может быть параметризована с тайм-аутом и будет обрабатывать ее самостоятельно - таким же образом. Не увидев собственный код java, но есть методы POSIX, такие как setsocketopt, с помощью которых можно установить таймауты. POSIX connect даст таймаут.

В java таймаут был позднее желательным дополнением для использования этих доступных тайм-аутов.