- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构造一个使用 boost::asio
的 Socket 类。首先,我创建了一个 connect 方法,该方法获取主机和端口并将其解析为 IP 地址。这很有效,所以我决定研究一下async_resolve
。但是,我的回调总是收到错误代码 995
(使用与同步工作时相同的目标主机/端口)。
代码:
启动解析的函数:
// 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
error_code
的 message()
函数是:
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;
}
提前致谢!
最佳答案
您的resolver
对象超出了范围,请将其移至Socket
类的成员,并使resolveHost
成为一个方法而不是免费的功能。
发生这种情况是因为 boost::asio::ip::tcp::resolver
是 a typedef of一个basic_resolver
,which inherits来自basic_io_object
。当解析器超出范围时,~basic_io_object()
destroys handler can be posted 之前的底层解析器服务.
Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io_service::post().
关于sockets - boost::asio::async_resolve 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4636608/
我对 C++ 的经验很少,并且在使用 boost-asio 时遇到了一些问题。我想按照以下方式重写标准的 boost-asio async-http-client 示例(http://www.boos
我正在构造一个使用 boost::asio 的 Socket 类。首先,我创建了一个 connect 方法,该方法获取主机和端口并将其解析为 IP 地址。这很有效,所以我决定研究一下async_res
我想知道传递给上述方法的对象的生命周期是多少。 异步解析 ip::basic_resolver::async_resolve(const query & q, ResolveHandler handl
下面的代码旨在执行以下操作:我有一个包装 boost asio 的解析器对象。解析器对象包含 io 服务和一个 worker,因此 io 服务运行函数永远不会返回。只要解析器对象还活着,就可以发出异步
我编写了生成大量传出 TCP 连接的复杂 TCP/IP 客户端应用程序。我尝试使用 boost::asio 作为 C++ 中的可移植 TCP/IP 网络实现。 我发现了以下问题。看代码: int ma
我使用函数 async_resolve() using tcp = boost::asio::ip::tcp; namespace asio = boost::asio; template clas
我的代码如下所示: //unrelated code snipped resolver.reset(new tcp::resolver(iosvc)); tcp::resolver::query qu
我应该为每个事件查询配备一个解析器,还是可以针对不同的查询对象多次调用 async_resolve? 最佳答案 否 在先前的查询仍处于事件状态时使用解析器并调用 async_resolve 是不正确的
使用 yield_context 作为堆栈协程中 Asio 异步操作的处理程序非常棒!但是 ip::basic_resolver::async_resolve 的处理程序具有与简单地接收错误代码不同的
我有这个代码。如何将我的方法 resolve_handler 与预期的迭代器和错误参数绑定(bind)?分解连接逻辑是否正确? void FileClient::start() { try {
当我调用 boost::asio::ip::tcp::resolver::async_resolve 时,我的处理程序收到一个 ip::tcp::resolver::iterator 迭代一个或多个
我按照 Boost.Asio 教程实现了一个简单的 TCP 客户端,但我在第一步就被阻止了,boost::asio::ip::tcp::resolver::async_resolve不起作用,永远不会
基于 this例如,我的程序有这个同步初始化部分: io_service = new boost::asio::io_service; resolver = new boost::asio::ip
我是一名优秀的程序员,十分优秀!