Страница 1 из 1
isql TimeOut Connect
Добавлено: 03 фев 2009, 09:45
serj77
может этот вопрос не по теме, но все же, при попытке конекта к удаленному серверу isql долго ждет чтоб сказать что хост не отвечает, подскажите где выставляется таймоуты чтоб не долго не ждать.
FB 1.5
Linux Suse 11.1
Re: isql TimeOut Connect
Добавлено: 03 фев 2009, 13:02
Dimitry Sibiryakov
firebird.conf
Re: isql TimeOut Connect
Добавлено: 03 фев 2009, 17:56
serj77
т.е. ты хочешь сказать что isql берет локальные натройки сервера при коннекте к удаленному серверу?
а если локально сервера нет, а есть только утилиты?
Re: isql TimeOut Connect
Добавлено: 03 фев 2009, 19:49
kdv
вообще нигде это не выставить. Потому что до тех пор пока соединение не состоялось или не обломилось с коннектом, за таймаут отвечает сетевая подсистема операционной системы.
Например, чтобы найти ip по имени, ОС должна сначала зарезолвить имя в DNS. А если DNS недоступен, то она будет к нему стучаться пока не получит облом. И т.д. То есть, FB тут ни при чем вообще.
Re: isql TimeOut Connect
Добавлено: 04 фев 2009, 16:09
Dimitry Sibiryakov
serj77 писал(а):т.е. ты хочешь сказать что isql берет локальные натройки сервера при коннекте к удаленному серверу?
а если локально сервера нет, а есть только утилиты?
При чём тут isql? Настройки из firebird.conf берёт fbclient. Или у тебя и его локально нет, а утилиты для доступа к серверу используют телепатию?..

Re: isql TimeOut Connect
Добавлено: 04 фев 2009, 17:29
kdv
о каких "локальных настройках" речь, и какие параметры коннекта к серверу может взять fbclient из firebird.conf?
ну, допустим, номер порта, и то если на сервере порт изменен на другой.
НИКАКИХ настроек таймаута соединения в firebird.conf нет. И на клиенте этот файл нафиг не нужен, по большому счету.
Дим, ты прочитай вопрос исходный еще раз. У него или ФБ вырублен, или закрыт firewall-ом, или ДНС не настроен на клиенте, и клиент не видит сервера по имени. ЭТОТ таймаут если и можно настроить, то в операционке. В виндах - либо в реестре руками, если такая настройка там вообще есть.
Или ты хочешь сказать, что ConnectionTimeout на это влияет, и если мы поставим 30, то если сервак недоступен, то клиент отвалится через 30 секунд?
Re: isql TimeOut Connect
Добавлено: 04 фев 2009, 17:43
hvlad
kdv писал(а):Или ты хочешь сказать, что ConnectionTimeout на это влияет, и если мы поставим 30, то если сервак недоступен, то клиент отвалится через 30 секунд?
Если дело дошло до вызова select, то да, отвалится через 30 сек.
Например сервер ТАК занят, что не смог ответить за 30 сек. Или его ответ не пришёл за 30 сек. И т.п.
Re: isql TimeOut Connect
Добавлено: 04 фев 2009, 17:44
kdv
речь то про коннект.
Re: isql TimeOut Connect
Добавлено: 05 фев 2009, 00:14
hvlad
kdv писал(а):речь то про коннект.
RTFM: socket, select

Re: isql TimeOut Connect
Добавлено: 05 фев 2009, 12:03
serj77
hvlad писал(а):kdv писал(а):речь то про коннект.
RTFM: socket, select

Во во, упоминание об этом в инете где то видел но только упоминание. А можно по подробнее пожалуйста локально система Suse, удаленный комп не имеет значения т.к. он выключен к примеру. Обьясню для чего чтоб понятней было, у меня 15 удаленных серверв и я скриптом разкладываю всякие изменения, и если где нить сервер выключен (бывает такое), чтоб isql не ждал 5 минут пока тайм аут не выйдет, а сократить время ожидания до минуты примерно [-o<
Спасибо.
Re: isql TimeOut Connect
Добавлено: 05 фев 2009, 13:26
Dimitry Sibiryakov
kdv писал(а):Или ты хочешь сказать, что ConnectionTimeout на это влияет, и если мы поставим 30, то если сервак недоступен, то клиент отвалится через 30 секунд?
Ну, либо так, либо его описание врёт, как и сообщения в firebird-support:
firebird.conf писал(а):# ----------------------------
# Client Connection Settings (Basic)
#
# Seconds to wait before concluding an attempt to connect has failed.
#
# Type: integer
#
#ConnectionTimeout = 180
Помнится, и на sql.ru был топик в котором говорилось, что это именно таймаут коннекта, а не предельное время ожидания выполнения запроса.
Re: isql TimeOut Connect
Добавлено: 05 фев 2009, 16:38
hvlad
Для тех, кто не понимает что такое socket api
Когда устанавливается TCP\IP соединение, клиент делает достаточно много вызовов. Это и создание локального сокета (socket), и ресолвинг имени сервера в адрес (gethostbyname), и установление соединения (connect) и т.д. Ни один из них не имеет тайм-аута.
Сразу после установления физического соединения, клиент и сервер обмениваются пакетами (аутентификация и прочее).
select - это вызов socket API, который, грубо говоря, ожидает появления данных в сокете.
Так вот ConnectionTimeout - это таймаут именно этого вызова select.
При нормально работающей сети, никакой другой вызов не должен тормозить.
Чаще всего тормозит gethostbyname из-за криво настроенного DNS.
Делать коннект асинхронно, для того чтобы таймаут работал и в кривом окружении, не входит в наши ближайшие планы.
Кому жмёт - делает это в своём приложении.
Re: isql TimeOut Connect
Добавлено: 07 фев 2009, 14:54
Attid
serj77 писал(а):
у меня 15 удаленных серверв и я скриптом разкладываю всякие изменения, и если где нить сервер выключен (бывает такое), чтоб isql не ждал 5 минут пока тайм аут не выйдет, а сократить время ожидания до минуты примерно [-o<
Спасибо.
поправь скрипт пусть пингует сервер перед раздачей