我在 boost.asio 上有一个服务器和一个客户端。我希望会话在收到第一个数据包后继续接收新数据包并处理它们。如果递归调用start,程序会无限期地执行回调函数。
class session : public std::enable_shared_from_this<session> {
public:
session(tcp::socket&&socket) : socket(std::move(socket)){
}
void start() {
async_read_until(socket, buf, "\0",
[self = shared_from_this()](boost::system::error_code code, size_t bytes_transferred) {
std::string require = buffer_cast<const char*>(self->buf.data());
std::cout << "GET: " << require << "\n";
if (require == "Hi") {
async_write(self->socket, buffer("Hello\0"), [](boost::system::error_code code, size_t bytes_transferred) {
std::cout << "SEND: Hello\n";
});
}
});
}
private:
tcp::socket socket;
streambuf buf;
};
为什么递归调用后立即调用回调函数?
没有递归调用。
但是链式操作(async_write)无法捕获
self
。因此析构函数会导致操作被取消。