Как просмотреть / изменить время ожидания подключения к сокету в Linux?

StackOverflow https://stackoverflow.com/questions/1045964

Вопрос

При создании сокета в Java:

new Socket(host, port);

Конструктор сокета попытается подключиться к хост: порт перед возвращением.В Windows это завершается сбоем почти сразу для недоступных хостов, но для Linux может потребоваться до 5 минут для истечения времени ожидания сокета.

Я знаю, что если у меня есть контроль над созданием сокетов, я могу сделать:

Socket s = new Socket();
s.bind(..);
s.connect(.., timeout);

но я бы предпочел, чтобы ОС использовала разумное значение по умолчанию.Есть ли способ изменить этот параметр в Linux?

Спасибо

Это было полезно?

Решение

Я думаю, ты хочешь /proc/sys/net/ipv4/tcp_syn_retries.Значение по умолчанию обычно равно 5 или 6, что составляет около 3 минут.

Обратите внимание, что они являются общесистемными.

Другие советы

Я бы не советовал изменять настройки операционной системы, поскольку это может неожиданно повлиять на другие приложения.В Socket.setSoTimeout() метод тоже может помочь вам.

Кстати, не совсем верно, что Linux и Windows ведут себя здесь по-разному.Помимо начальных попыток синхронизации (которые могут быть настроены в Linux и Windows), состояние соседа, а также другие маршрутизаторы, отправляющие ПЕРВЫЕ пакеты, также играют определенную роль.

Если попытка подключения в Windows немедленно завершается неудачей, вполне вероятно, что она была предпринята маршрутизатором ранее восьми раз или сосед был признан недоступным на уровне ARP.Попробуйте arp -a -v команда в Windows для просмотра недоступных хостов, которые быстро отклоняются.

Для Linux вы бы использовали ip neigh чтобы перечислить состояние доступности станций в вашей локальной сети.

Насколько я понимаю, это зависит от системного тайм-аута TCP / IP по умолчанию (240 секунд по умолчанию?)...один из вариантов - попробовать настроить их, однако это может повлиять на любые другие программы на том же компьютере, которые полагаются на значение тайм-аута.В этом случае, возможно, было бы безопаснее вместо этого просто снизить значение "тайм-аут" в вашем вызове Java connect().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top