async_connect metodu
TCP socket için şöyle yaparız.
Şöyle yaparız.
İmzası şöyle
Örnek
Şöyle yaparız.
Benzer bir çözüm şöyle.
TCP socket için şöyle yaparız.
var iterator = resolver.resolve({adress, port});
asio::async_connect (socket, iterator,handler);
Bazı örneklerde iterator yerine endpoint kullanılıyor. Şöyle yaparız.asio::async_connect(socket, endpoints,handler);
Örnek 2Şöyle yaparız.
auto self(shared_from_this());
boost::asio::async_connect(m_socket, endpoint_iter,
[this, self](boost::system::error_code ec, tcp::resolver::iterator){...}
Handlerİmzası şöyle
void handler(const boost::system::error_code& error, Iterator iterator);
Eğer iterator parametresi ile ilgilenmiyorsak şöyle yaparız.
void OnConnect(const boost::system::error_code& error)
{
if (!error)
{
...
} else
{
...
}
}
async_connect ve timeoutÖrnek
Şöyle yaparız.
struct Service {
using error_code = boost::system::error_code;
template<typename AllowTime, typename Cancel>
void await_operation_ex(AllowTime const& deadline_or_duration, Cancel&& cancel)
{
using namespace boost::asio;
ioservice.reset();
{
high_resolution_timer tm(ioservice, deadline_or_duration);
tm.async_wait([&cancel](error_code ec)
{
if (ec != error::operation_aborted)
std::forward<Cancel>(cancel)();
});
ioservice.run_one();
}
ioservice.run();
}
template<typename AllowTime, typename ServiceObject>
void await_operation(AllowTime const& deadline_or_duration, ServiceObject& so) {
return await_operation_ex(deadline_or_duration, [&so]{ so.cancel(); });
}
boost::asio::io_service ioservice;
};
Şöyle yaparız.tcp::socket socket = ...;
...
boost::asio::async_connect(s, ..., ...);
service.await_operation_ex(TIMEOUT, [&]{
throw std::runtime_error("Error connecting to server: timeout\n");
});
ÖrnekBenzer bir çözüm şöyle.
Hiç yorum yok:
Yorum Gönder