3

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 与 no_delay 不可能?我必须调用 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

有人有想法,如何正确地做到这一点?

4

1 回答 1

2

自由函数的处理程序签名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){...}
于 2017-02-09T11:27:37.220 回答