Я в процессе создания класса Socket, который использует boost::asio
. Для начала я сделал метод connect
, который взял хост и порт и разрешил его на IP-адрес. Это сработало хорошо, поэтому я решил посмотреть на async_resolve
. Однако мой обратный вызов всегда получает код ошибки 995
(с использованием того же хоста/порта назначения, что и при работе синхронно).boost :: asio :: async_resolve Задача
код:
Функция, которая начинается разрешение:
// resolve a host asynchronously
template<typename ResolveHandler>
void resolveHost(const String& _host, Port _port, ResolveHandler _handler) const
{
boost::asio::ip::tcp::endpoint ret;
boost::asio::ip::tcp::resolver::query query(_host, boost::lexical_cast<std::string>(_port));
boost::asio::ip::tcp::resolver r(m_IOService);
r.async_resolve(query, _handler);
}; // eo resolveHost
код, который вызывает эту функцию:
void Socket::connect(const String& _host, Port _port)
{
// Anon function for resolution of the host-name and asynchronous calling of the above
auto anonResolve = [this](const boost::system::error_code& _errorCode,
boost::asio::ip::tcp::resolver_iterator _epIt)
{
// raise event
onResolve.raise(SocketResolveEventArgs(*this, !_errorCode ? (*_epIt).host_name() : String(""), _errorCode));
// perform connect, calling back to anonymous function
if(!_errorCode)
connect(*_epIt);
};
// Resolve the host calling back to anonymous function
Root::instance().resolveHost(_host, _port, anonResolve);
}; // eo connect
message()
функция error_code
является:
The I/O operation has been aborted because of either a thread exit or an application request
И мой main.cpp
выглядит следующим образом:
int _tmain(int argc, _TCHAR* argv[])
{
morse::Root root;
TextSocket s;
s.connect("somehost.com", 1234);
while(true)
{
root.performIO(); // calls io_service::run_one()
}
return 0;
}
Спасибо заранее!
Спасибо большое, это должно было быть совершенно очевидно :) –
@ Му-Сок без проблем, рад помочь. Иногда вам нужен второй набор глаз. –