изменить время ожидания в сети Solaris - PullRequest
1 голос
/ 31 января 2011

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

Когда я выполняю это для окон -> тайм-аут -> хорошо

D:> telnet 192.168.23.21 222

Соединение с 192.168.23.21 ... Не удалось открыть соединение с хостом на порту 23:

Ошибка подключения

D:>

в Windows (целевой IP-адрес не существует), а затем примерно через 15 секунд команда завершается.

Однако, когда я выполняюэто из solaris -> очень большой тайм-аут -> не подходит для моего устаревшего кода машина, подобная этой:

myuser @ mycomp: ~ $ telnet 192.168.23.21 222

Попытка 192.168.23.21 ...

Тогда процесс не завершается

, и это имеет для меня серьезные последствия, потому что я переношу приложение из Windows вСолярис, и я должен иметь этот тайм-аут (в устаревшем коде, который я не могу обновить), поэтому мне нужно на уровне ОС контролировать этот тайм-аутбыть таким же коротким, как в настоящее время в Windows. Как я могу изменить это время ожидания в моей ОС Solaris?Короче говоря, так же, как у меня это на Windows

Спасибо

Ответы [ 2 ]

2 голосов
/ 31 января 2011

Если вам абсолютно необходимо сделать это в масштабе всей системы, есть параметр драйвера TCP tcp_ip_abort_cinterval, который можно изменить:

tcp_ip_abort_cinterval - это количество времени, в течение которого соединение разрешено оставаться в полуоткрытом состоянии. Это 180 000 (3 минуты) по умолчанию. Вы можете изменить это до 25 000 если хочешь (25 секунд). Обратите внимание, что, изменив это Вы можете обнаружить, что у пользователей SLIP / PPP могут возникнуть проблемы ваш сайт.

Для просмотра текущих настроек:

/ usr / sbin / ndd / dev / tcp tcp_ip_abort_cinterval

Чтобы изменить настройку:

/ usr / sbin / ndd -set / dev / tcp tcp_ip_abort_cinterval 25000

0 голосов
/ 31 января 2011

Возможно, вы могли бы установить опцию сокета SO_SNDTIMEO - эта ссылка сообщает, что Solaris не уважает эту опцию, но, возможно, вам повезло, и они уже исправили ее. :)

Если опция сокета не работает, вы всегда можете установить alarm(2) для некоторой точки в будущем и прервать ваш connect(2) вызов. Это кажется довольно грубым, но это вариант.

Другим вариантом является переключение на неблокирующие операции с сокетами и опрос в какой-то момент в будущем, если операция connect(2) будет успешной или нет. Вы можете увидеть тайм-аут до select(2) и выяснить, не произошла ли ошибка или она доступна для чтения / записи. (См. Также бит EINPROGRESS в connect(2).)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...