我正在运行一行简单的代码来查找DNS名称:
__android_log_print(ANDROID_LOG_ERROR, "dns", "DNS query: %s", name);
if ((responseLen = res_query(name, 1, 1, buffer, sizeof(buffer))) < 0) {
__android_log_print(ANDROID_LOG_ERROR, "dns", "DNS query failed");
goto query_error;
}
__android_log_print(ANDROID_LOG_ERROR, "dns", "DNS query success");
我在Android 4.4等级19上测试过。
我从WIFI界面获得了名称,似乎是正确的。
有时打印“DNS查询成功”。它从不打印“DNS查询失败”。
我发现某些的时间只打印“DNS查询:blahblah”而且只是挂起。如果发生这种情况,它会反复挂起。
如果它有效,它也会重复工作。然后它会突然停止工作。就像潮水一样;当它很高时你可以导航但是当它很低时你就不能。
我已经确认缓冲区足够大(4KB)。
我还验证了挂起时没有进行DNS查询(尝试使用Wireshark捕获数据包;没有捕获任何内容)。
我已尝试使用Android 4.0(第14级)并且运行正常。
为什么res_query()会像那样挂起?