我正在使用包装类来表示网络连接。我的实现包含一个名为 的方法async_connect()
,它解析主机/服务并连接到相关端点(如果可能)。像这样的东西:
void tcp::connection::async_connect(std::string const& host, std::string const& service,
protocol_type tcp = protocol_type::v4())
{
std::cout << "thread [" << boost::this_thread::get_id() << "] tcp::connection::async_connect()" << std::endl;
resolver(m_io_service).async_resolve(resolver::query(tcp, host, service),
boost::bind(&connection::resolve_handler, this, _1, _2));
}
我想知道的是从处理程序建立连接,由方法完成调用async_resolve
。
我不确定是使用主线程还是工作线程来调用处理程序。因此,我应该调用socket::connect()
(如果该代码将从工作线程执行,这将是最明智的方式)还是再次启动异步操作(socket::async_connect()
- 应该在由主线程执行时使用)。
void tcp::connection::resolve_handler(boost::system::error_code const& resolve_error,
tcp::resolver::iterator endpoint_iterator)
{
std::cout << "thread [" << boost::this_thread::get_id() << "] tcp::connection::resolve_handler()" << std::endl;
if (!resolve_error)
{
boost::system::error_code ec;
m_socket.connect(*endpoint_iterator, ec);
}
}
我观察到 - 从控制台输出 - myresolve_handler
是从工作线程调用的。那么,在这里打电话可以socket::connect()
吗?