Qt没有解析URL

时间:2013-08-06 04:15:45

标签: qt dns embedded-linux qtwebkit

我使用Qt 4.8中的演示代码作为基础,在我的应用程序中添加了一个简单的浏览器页面: [QTDIR] \演示\浏览器

这在Windows中运行良好,但是当我重新构建应用程序并在我的嵌入式Linux设备上尝试它时,它会失败。在进行实验时,我发现我可以通过解析IP地址并使用它来加载www.google.com。我在应用程序中添加了以下代码:

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.conf - 看起来不错。
  2. 检查我的网关显示在“route -n”中 - 看起来不错。
  3. 尝试“ping 8.8.8.8” - 工作正常。
  4. 尝试过“nslookup www.google.com” - 工作正常。
  5. 尝试“wget http://www.google.com” - 正确加载index.html。
  6. 我只能想象Qt正在使用不同的方法来解析DNS地址,但我不知道它可能是什么。

1 个答案:

答案 0 :(得分:1)

事实证明,“名称解析中的临时失败”是错误EAI_AGAIN,当getaddrinfo()不知道问题是什么时,它会返回。它失败了因为我以root身份运行nslookup但是应用程序在用户帐户下运行,并且只有root用户具有对/etc/resolv.conf的读取权限。一旦我做了一个chmod一切正常。

为了永久修复此问题,我们在/usr/libexec/udhcpc.sh中添加了一个chmod,以便在创建/etc/resolve.conf时正确设置权限。