Тайм-аут получения запроса, даже если тайм-аут соединения и тайм-аут чтения установлены по умолчанию (бесконечно)?
Я подключаюсь к веб-службе и не установил таймаут подключения и тайм-аут чтения на HttpURLConnection. Что такое время ожидания подключения по умолчанию и время ожидания чтения? Это зависит от телефона Android? Или Android/ Java имеет собственное значение по умолчанию для тайм-аута?
Когда я пытаюсь получить значение моего времени ожидания подключения (getConnectTimeout()
) и прочитайте тайм-аут (getReadTimeout()
), он возвращает значение 0, которое я предполагаю эквивалентно бесконечности. Однако, хотя их значение равно 0, иногда я получаю сообщение об ошибке тайм-аута запроса. Поэтому их значение не может быть равным бесконечности. Может ли кто-нибудь просветить меня об этом?
3 ответа
Вы делали какие-либо исследования? Значения по умолчанию подробно описаны в документации. Вот соответствующие части:
public void setConnectTimeout (int timeout) Начиная с: Уровень API 1
Устанавливает значение времени ожидания в миллисекундах для установления соединения с ресурсом, указанным этим экземпляром URLConnection. SocketTimeoutException генерируется, если соединение не может быть установлено в это время. По умолчанию 0, что означает бесконечное время ожидания.
public void setReadTimeout (int timeout) Начиная с: Уровень API 1
Устанавливает значение времени ожидания в миллисекундах для чтения из входного потока установленного соединения с ресурсом. SocketTimeoutException генерируется, если соединение не может быть установлено в это время. По умолчанию 0, что означает бесконечное время ожидания.
Также есть эта заметка по таймаутам:
URLConnection поддерживает два тайм-аута: тайм-аут соединения и тайм-аут чтения. По умолчанию операции никогда не прекращаются.
Возможно, сервер подключается к вашему клиенту.
Если getConnectTimeout
а также getReadTimeout
от объекта вернуть ноль, то это действительно означает бесконечность. Это унаследовано от основного URLConnection
учебный класс.
Возможно, что полученное вами исключение не является SocketTimeoutException
В общем, вы должны это проверить - можно получить IOException
выбрасывается независимо от настроек тайм-аута.
Javadoc для connect()
это неверно. Ноль дает вам время ожидания подключения к платформе, которое не бесконечно, а составляет около минуты. Вы можете только уменьшить это значение с timeout
параметр для connect(),
не увеличивайте это.