Как запретить gethostid выполнять поиск DNS на Linux? - PullRequest
1 голос
/ 13 февраля 2012

Наше приложение (RHEL 5 / c ++) использует hostid, возвращаемое gethostid для ведения журнала.По какой-то причине основной DNS-сервер локальной сетевой среды отключился.Это привело к огромным проблемам в gethostid: вызов функции зависает более 60 с, что приводит к внутренним тайм-аутам в нашем приложении.Звонок на hostid в командной строке также не вернулся через несколько минут.Когда DNS-сервер снова заработал, таймауты / проблемы как в приложении, так и в инструменте командной строки hostid исчезли.

Мой вопрос: как мне запретить gethostid выполнять поиск DNS?В ответе есть некоторые граничные условия:

  • Файл /etc/hostid не должен существовать.
  • Вызов sethostid недопустим.
  • Изменение /etc/hosts невозможно.

Я удивлен, что это вообще происходит.Как я понимаю, gethostid это работает так:

  1. Возвращает значение последнего sethostid, если оно было установлено вручную.
  2. Возвращает форму хоста / etc / hostid ifфайл существует.
  3. Возвращает основной IP-адрес хоста, если он установлен.
  4. Не работает в других случаях.

Я не вижу необходимости в DNSquery.

Чтобы убедиться, что gethostid на самом деле зависит от работающего DNS-сервера, попробуйте следующее:

  • От имени пользователя root создайте / измените ваш /etc/reslov.conf так, чтобы онсодержит только недопустимые nameserver записи.
  • Вызовите hostid в командной строке.

При моей установке debian / squeeze это приводит к хосту 00000000 без каких-либо зависаний.Я предполагаю, что RedHat-версия hostid отличается / старше и результаты зависают.

1 Ответ

0 голосов
/ 13 февраля 2012

Я думаю, что предотвращение DNS-запросов от gethostid на самом деле невозможно без разрушения системы или нарушения одного из граничных условий.На gnu.org Я нашел этот комментарий к функции sethostid:

Правильный способ установить основной IP-адрес системы - настроить IP-адресresolver, чтобы связать этот IP-адрес с именем хоста системы, возвращаемым gethostname.Например, поместите запись для системы в /etc/hosts.

Из этого я делаю вывод, что gethostid определяет IP следующим образом:

  • Получитеимя хоста из gethostname.
  • Определите IP-адрес с помощью gethostbyname (или аналогичным способом).

При условии, что имя хоста не связано с IP-адресомв /etc/hosts и /etc/nsswitch.conf разрешен поиск DNS, поиск DNS будет выполняться gethostid.

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