Qt не разрешает URL-адреса


Я добавил простую страницу браузера в свое приложение, используя демонстрационный код в Qt 4.8 в качестве основы: [QTDIR]demosbrowser

Это прекрасно работает в Windows, но когда я перестраиваю приложение и пробую его на своем встроенном устройстве Linux, оно терпит неудачу. Экспериментируя, я обнаружил, что могу заряжать www.google.com разрешив IP-адрес и используя его вместо этого. Я добавил в свое приложение следующий код:

QHostInfo hostInfo = QHostInfo::fromName(m_url);
if (hostInfo.error() != QHostInfo::NoError)
{
    qDebug() << "Lookup failed:" << hostInfo.errorString();
}
foreach (QHostAddress hostAdd, hostInfo.addresses())
{
    qDebug() << "Found address:" << hostAdd.toString();
}

Это выводит ошибку "временный сбой в разрешении имен". Так что на устройстве у меня есть попробовал:

  1. проверено /etc / resolv.конф-выглядит неплохо.
  2. проверил, что мой шлюз отображается в "route-n" - выглядит хорошо.
  3. попробовал "ping 8.8.8.8" - работает нормально.
  4. попробовал "nslookup www.google.com - ... работает отлично.
  5. попробовал "wget http://www.google.com " - правильно загружает индекс.формат html.
Я могу только представить, что Qt использует другой метод для разрешения DNS-адресов, но я понятия не имею, что это может быть.
1 2

1 ответ:

Оказывается, что "временная ошибка в разрешении имен" - это ошибка EAI_AGAIN, которую возвращает getaddrinfo (), когда он действительно не знает, в чем проблема. Это было неудачно, потому что я запускал nslookup от имени root, но приложение работало под учетной записью пользователя, и по ошибке только root имел разрешение на чтение для /etc/resolv.конф. Как только я сделал чмод, все работало.

Чтобы исправить это навсегда, мы добавили chmod в /usr/libexec/udhcpc.sh так что разрешение на /etc / resolve.рассмотр установите правильно, когда он будет создан.