我该如何适应这个C ++testing用例,以便继续使用新的networking设备?

如果您创build了networking状态指示器,则可能需要执行此操作。 在一个循环中,parsingDNS并返回ping的结果。

那么,我们如何确保DNSparsing在networking设备更改时继续工作? 在这种情况下,通过断开内置networking,然后连接GPRS调制解调器。

我正在使用Fedora 13,但我猜这是在许多其他基于nix的系统上的相同行为。

正如你可以从下面的日志中看到的,切换时,它从“非权威性”到“权威性”,但从未find主机。

(请告诉我如何降价转义<<预先代码块或我必须使用HTML代码?)

#include <iostream> #include <boost/asio.hpp> int main(int argc, char *argv[]) { std::string DNS = "www.google.com"; while (1) { try { boost::asio::io_service io_service; boost::asio::ip::tcp::resolver resolver(io_service); boost::asio::ip::tcp::resolver::query query(DNS.c_str(), ""); boost::asio::ip::tcp::resolver::iterator iter = resolver.resolve(query); boost::asio::ip::tcp::resolver::iterator end; if (iter != end) { boost::asio::ip::address addr = (iter++)->endpoint().address(); std::cout << addr.to_string() << std::endl; } } catch (std::exception &e) { std::cerr << "Error: GetIP():" << e.what() << std::endl; } usleep(1000000); } } 
 [test@Test-Live-1010001 Downloads]$ g++ -o test -lboost_system -lpthread testcase_hostname_not_found.cpp [test@Test-Live-1010001 Downloads]$ ./test 209.85.149.106 209.85.149.99 209.85.149.104 209.85.149.147 209.85.149.106 209.85.149.103 209.85.149.105 209.85.149.99 209.85.149.103 209.85.149.103 209.85.149.106 Error: GetIP(): Host not found (non-authoritative), try again later Error: GetIP(): Host not found (non-authoritative), try again later Error: GetIP(): Host not found (non-authoritative), try again later Error: GetIP(): Host not found (non-authoritative), try again later Error: GetIP(): Host not found (non-authoritative), try again later Error: GetIP(): Host not found (non-authoritative), try again later Error: GetIP(): Host not found (non-authoritative), try again later Error: GetIP(): Host not found (non-authoritative), try again later Error: GetIP(): Host not found (non-authoritative), try again later Error: GetIP(): Host not found (authoritative) Error: GetIP(): Host not found (authoritative) Error: GetIP(): Host not found (authoritative) 

由于您正在运行Fedora,NetworkManager可能正在运行,并在以太网关闭时从/etc/resolv.conf自动删除DHCP学习的名称服务器。 (或者修改resolv.conf来响应接口的变化)