Исключение Java: время ожидания чтения сокета
Я пытаюсь обратиться к очень тяжелому процессу.
Средняя продолжительность работы оценивается в 9-10 минут.
Когда я выполняю этот процесс, я устанавливаю тайм-аут для смехотворно огромного числа: 99999999.
Через 2 минуты я получаю следующую ошибку:
java.net.SocketTimeoutException: время ожидания чтения
Я попытался связать его еще немного, и я установил тайм-аут на 3000, и через 3 секунды, как и ожидалось, я получил ту же ошибку.
Есть ли у вас какие-либо идеи о том, почему socket.setSoTimeout(99999999)
задает значение 120000 max?
Ответы
Ответ 1
У меня была та же проблема, и решение не использовалось
socket.shutdownInput(); socket.shutDownOutput();
до последнего времени чтения или записи данных в сокет. Это заставило сокет перейти в состояние FIN_WAIT, ожидая за 2 минуты до закрытия. Вы можете прочитать об этом в этом сообщении
Ответ 2
Ясно, что вы не устанавливаете тайм-аут, который, по вашему мнению, вы устанавливаете, или кто-то еще его меняет. Вам нужно будет опубликовать код, чтобы получить дальнейшее разъяснение.
Обратите внимание, что в соответствии с W.R. Stevens в TCP/IP Illustrated, том II, № 17.4 тайм-аут удерживается коротким числом целых 1000 Гц, поэтому тайм-аут, превышающий 11 минут, невозможен. Это относится к BSD-коду.
Ответ 3
Я не уверен, как работает ваше приложение, но попытайтесь установить бесконечный тайм-аут в сокет
public void setSoTimeout(int timeout)
throws SocketException
Включить/отключить SO_TIMEOUT
с указанным таймаутом в миллисекундах. Если этот параметр установлен на ненулевой тайм-аут, вызов read()
на InputStream
, связанный с этим Socket, будет блокироваться только на это количество времени. Если истечение времени ожидания истекает, появляется java.net.SocketTimeoutException
, хотя Socket все еще действителен. Опция должна быть активирована до того, как будет введена операция блокировки. Тайм-аут должен быть > 0
. Тайм-аут нуля интерпретируется как бесконечный тайм-аут.
Если вы предоставите больше информации о своем вызове, я могу улучшить ответ.