Как я могу адаптировать этот тестовый набор C ++, чтобы он продолжал работать с новым сетевым устройством? - PullRequest
3 голосов
/ 10 февраля 2011

Это то, что вы могли бы сделать, если вы сделали индикатор состояния сети. В цикле разрешите DNS и верните результат ping.

Итак, как мы можем убедиться, что разрешение DNS продолжает работать при смене сетевого устройства? В этом случае путем отключения встроенной сети следует подключение модема GPRS.

Я использую Fedora 13, но думаю, что такое же поведение во многих других системах на базе nix.

Как видно из журнала ниже, при переключении он переходит из "неавторизованного" в "авторитетный", но хост не найден.

(Скажите, пожалуйста, как сделать разметку escape << внутри блока предварительного кода, или я должен использовать HTML-код?) </p>


#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)

1 Ответ

0 голосов
/ 10 февраля 2011

Поскольку вы используете Fedora, NetworkManager, вероятно, работает и автоматически удаляет изученные DHCP-серверы имен из /etc/resolv.conf, когда Ethernet отключается. (Или иначе изменив resolv.conf в ответ на изменения интерфейса)

...