持久连接 boost.asio

问题描述 投票:0回答:1

我在 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;
};

为什么递归调用后立即调用回调函数?

c++ boost-asio
1个回答
0
投票

没有递归调用。

但是链式操作(async_write)无法捕获

self
。因此析构函数会导致操作被取消。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.