В последнее время я работаю над разработкой сетевого приложения, основанного на платформе Linux (2.6.32). Мой сценарий заключается в том, что устройству необходимо периодически отправлять данные на сервер. Каждый раз, когда сетевой код сначала вызывает функцию getaddinfo(), он возвращает IP-адрес сервера, а затем я передал это значение интерфейсу сокета или libcurl api.
Однако я обнаружил, что если для /etc/resolv.conf установлено недопустимое значение, например сервер имен 169.254.1.1, getaddrinfo() вернет значение ошибки (-3). Даже если я обновлю /etc/resolv.conf до действительного значения, getaddrinfo() все равно вернет ошибку.
Кажется, что функция getaddrinfo() не будет обновлять значение сервера имен после первого вызова.
Мое решение состоит в том, чтобы вызвать getaddrinfo() в независимом процессе (не в потоке). Я обнаружил, что это реальный способ решить вышеуказанную проблему.
Какова основная причина вышеуказанной проблемы?