Android (Java) HttpURLConnection тихая повторная попытка при тайм-ауте чтения

Так что я используюGoogle Volley для HTTP-запроса, который в основном используетJava«sHttpURLConnection.

Согласно моим тестам,проблема в этом:
Когда тайм-аут «чтения» наHttpURLConnection достигает, молчаливая попытка выполняется до того, как соединение закрывается и выдается соответствующее исключение (SocketTimeoutException).

Заметка тот:
- я заметил эту ошибку при использованииHTTP POST запрос.
- Тайм-аут 'read' отличается от тайм-аута 'connect'.
- Если тайм-аут «чтения» (устанавливается путем вызоваconnection.setReadTimeout(int)) НЕ установлено (0) или установлено на большее значение, чемconnection.setConnectTimeout(int)эта ошибка не возникает.
- Этот вопрос уже обсуждался,Вот например, но я не нашел никакого удовлетворительного решения.
- Можно найти несколько связанную проблемуВот, но я не уверен, что это актуально (не так ли?)

Больше фона
Мое приложение используется для оплаты денег, поэтому крайне важно не повторять запрос (да, я знаю, что он может быть обработан сервером, я все равно хочу, чтобы мой клиент был "правильным").

Когда установлен тайм-аут «чтения», в случае, если установлено соединение с сервером, но сервер ожидает / спит / задерживает ответ в течение «тайм-аута», прежде чем ответить (таким образом, возникает исключение «чтение», а не исключение «подключение») другой (молчаливый) запрос отправляется непосредственно перед возникновением этого исключения, что приводит к 2 аналогичным запросам, что недопустимо.

Какое решение я ищу?
Ну, тот, который хорошо решит эту проблему / ошибку, как объяснил исправлениеВот (но я опять-таки думаю, что это неактуально в данном случае).
Кроме того, я хотел бы сохранить исходный поток как есть, то есть не заставлять соединение закрываться или что-то в этом роде.

На данный момент я собираюсь установить для тайм-аута «чтения» значение, в два раза превышающее тайм-аут «соединения» (они начинают отсчитываться одновременно), чтобы убедиться, что сначала возникает исключение «соединение». Я также постараюсь преодолеть эту проблему на стороне сервера. Проблема в том, что этот тайм-аут чтения есть по причине, и моя текущая реализация практически просто игнорирует его и обрабатывает только тайм-ауты соединения.

РЕДАКТИРОВАТЬ Volley библиотекиRetryPolicy не влияет на эту проблему, так как это тихая попытка. Я заглянул в библиотеку как можно глубже. Журналы / точки останова везде, отменены звонки, чтобы повторить. Вот как я знаю, это 99,99%HttpURLConnection вопрос.

Ответы на вопрос(3)

Ваш ответ на вопрос