2013-11-07 4 views
-3

Недавно я написал некоторое приложение, которое создает много потоков и подключается к различным серверам в качестве клиента, я использовал для него сокеты, тогда я понял, что могу сделать это с помощью библиотеки boost, поэтому я переписал приложение для повышения часть соединений работает хорошо и часть дает эту ошибку:Хост не найден (авторитетный)

Host not found (authoritative)

Я не знаю, почему это происходит, когда я getaddrbyhost это работает отлично, но повысить распознаватель дать эту ошибку ... , что может быть не так, каждый адрес - домен.

Вот часть кода:

class client 
{ 
public: 
    client(boost::asio::io_service& io_service, 
      const char* server, const char* port, const int i) 
     : resolver_(io_service), 
      socket_(io_service), 
      i_(i) 
    { 

     tcp::resolver::query query(tcp::v4(), boost::lexical_cast<std::string>(server), boost::lexical_cast<std::string>(port), boost::asio::ip::resolver_query_base::numeric_service); 
     resolver_.async_resolve(query, 
           boost::bind(&client::handle_resolve, this, 
              boost::asio::placeholders::error, 
              boost::asio::placeholders::iterator)); 
    } 

private: 
    void handle_resolve(const boost::system::error_code& err, 
         tcp::resolver::iterator endpoint_iterator) 
    { 
     if (!err) 
     { 
      boost::asio::async_connect(socket_, endpoint_iterator, 
             boost::bind(&client::handle_connect, this, 
                boost::asio::placeholders::error)); 
     } 
     else 
     { 
      //here outputs error 
      std::cout << __FUNCTION__ << " Error: " << err.message() << "\n"; 
     } 
    } 

редактировать совершенно странно, вчера я получил проблемы с ним и сегодня он работает ... хм, может быть, был занят DHCP или что-то

ответ

0

Ну, ответ - это хост, который я пытался подключить, был вне моей локальной сети в другой локальной сети, зарегистрированной как сложный домен. Я не мог этого знать, потому что тестировал около 20 000 хостов, хранящихся в базе данных компании. Я думал, что все работает только в одной локальной сети, но нет.

1

Скорее всего, домен - тот, который не разрешен DNS, но разрешен каким-либо другим способом, который использует платформа хоста, например, таблица стилей /etc/hosts, WINS или аналогичная схема разрешения имен.

+0

, так что я могу сделать, я использую linux для тестирования, каждый домен является глобальным доменом, а не локальным, он разрешен getaddrbyhost, но не с помощью boost resolver ... –

+0

Не работает ли ваш код для * каждого * домена или только для некоторых? –

+0

только для некоторых ... но тот же домен работает с не форсированным кодом, это странно для меня –

Смежные вопросы