API getaddrinfo() с помощью systemd
Я сталкиваюсь с проблемой при запросе DNS с использованием API getaddrinfo() в рамках процесса, инициированного systemd. Несмотря на наличие записи сервера имен в /etc/resolv.conf, запрос не может быть решен. После нескольких трассировок системных вызовов обнаруживается, что проблема связана с разрешением systemd. Похоже, что для процесса, инициированного systemd, DNS-запрос getaddrinfo(), маршрутизируемый через systemd в автономном режиме (то есть порожденном оболочкой), выполняется нормально. Я изменил /etc/systemd/resolved.conf, чтобы добавить свой DNS-адрес, и перезапустил systemd-resolved. Теперь DNS-запрос работает правильно.
Есть ли способ обойти systemd для getaddrinfo() [например: передать дополнительные флаги подсказкам] и выполнить работу обычным способом?
1 ответ
На мой взгляд, подлинный getaddrinfo()
Вызов всегда должен использовать glibc.
Мое лучшее предположение состоит в том, что предполагаемая корреляция с инициированием процесса systemd полностью неверна В системе systemd все обычные процессы инициируются прямо или косвенно системой systemd.
Разрешение сетевых имен, выполняемое glibc, определяется не только /etc/resolv.conf
но также /etc/nsswitch.conf
, Вы, вероятно, увидите решенные, упомянутые в этом файле.