Наше приложение (RHEL 5 / c ++) использует hostid, возвращаемое gethostid
для ведения журнала.По какой-то причине основной DNS-сервер локальной сетевой среды отключился.Это привело к огромным проблемам в gethostid
: вызов функции зависает более 60 с, что приводит к внутренним тайм-аутам в нашем приложении.Звонок на hostid
в командной строке также не вернулся через несколько минут.Когда DNS-сервер снова заработал, таймауты / проблемы как в приложении, так и в инструменте командной строки hostid
исчезли.
Мой вопрос: как мне запретить gethostid
выполнять поиск DNS?В ответе есть некоторые граничные условия:
- Файл
/etc/hostid
не должен существовать. - Вызов
sethostid
недопустим. - Изменение
/etc/hosts
невозможно.
Я удивлен, что это вообще происходит.Как я понимаю, gethostid
это работает так:
- Возвращает значение последнего
sethostid
, если оно было установлено вручную. - Возвращает форму хоста / etc / hostid ifфайл существует.
- Возвращает основной IP-адрес хоста, если он установлен.
- Не работает в других случаях.
Я не вижу необходимости в DNSquery.
Чтобы убедиться, что gethostid
на самом деле зависит от работающего DNS-сервера, попробуйте следующее:
- От имени пользователя root создайте / измените ваш /etc/reslov.conf так, чтобы онсодержит только недопустимые
nameserver
записи. - Вызовите
hostid
в командной строке.
При моей установке debian / squeeze это приводит к хосту 00000000
без каких-либо зависаний.Я предполагаю, что RedHat-версия hostid
отличается / старше и результаты зависают.