我成功地将async_connect
用作自由函数并将lambda用作connect_handler,如下所示:
auto self(shared_from_this());
boost::asio::async_connect(m_socket, endpoint_iter, [this, self](boost::system::error_code ec, tcp::resolver::iterator){...}
然而,现在我被迫使用no_delay
标志。关于此条目boost::asio with no_delay not possible?我必须将async_connect作为套接字的成员函数调用。试试如下
m_socket.async_connect(endpoint_iter->endpoint(), [this, self](boost::system::error_code ec, tcp::resolver::iterator){...}
我的编译器(VS2013)给了我一个错误Error 1 error C2338: ConnectHandler type requirements not met
有人有想法,如何正确地做到这一点?
答案 0 :(得分:1)
自由函数async_connect
的处理程序签名应为:
void handler(const boost::system::error_code& error, Iterator iterator);
成员函数basic_stream_socket::async_connect
的处理程序签名应为:
void handler(const boost::system::error_code& error);
原因是你给自由函数提供了多个端点,然后给你一个迭代器来告诉你哪个连接了,而你只给了一个端点到成员函数,它不必告诉你哪个一个是连接的,因为你只提供了一个。
因此,为了使代码工作,您很可能只需要从lambda回调的参数中删除迭代器:
m_socket.async_connect(endpoint_iter->endpoint(), [this, self](boost::system::error_code ec){...}