C++提升async_accept异常"already open"

C++ boost async_accept exception "already open"

本文关键字:already open 异常 accept 提升 async C++      更新时间:2023-10-16

我遇到了一个小问题,我看不到很多人都遇到了提升async_accept。

这就是我处理async_accept的方式以及我如何称呼它。

void Server::accept()
{
    try {
        Connection* connection = new Connection(io_service);
        connections.push_back(connection);
        acceptor->async_accept(connection->getSocket(), std::bind(&Server::onAccept, this, std::placeholders::_1, connection));
    }
    catch (const boost::system::system_error& e) {
        std::cout << "> [Error - Server::start]: " << e.what() << std::endl;
    }
}
void Server::onAccept(const boost::system::error_code& e, Connection* connection)
{
    if (e) {
        std::cout << "> [Error - Server::onAccept]: " << e.message() << std::endl;
        connection->disconnect();
        return;
    }
    connection->read();
    accept();
}

方法connection->getSocket(( 返回对连接类中的 boost::asio::ip::tcp::socket socket socket 变量的引用。连接被接受,但是当调用onAccept时,出现"已打开"错误,我似乎找不到解决方案。

问题不在于显示的代码。

Google显示许多人都有相同的问题,并且前3次点击之一显示它是由正在使用客户端连接类的事实引起的,而这是一个服务器。

客户端连接启动连接,因此,如果您复制/粘贴该代码,您将有一个打开的连接,这当然是"已经打开"。

检查是否未在 Connection 类中打开套接字。 或者,检查是否在new Connection中实例化了正确的类型(名称和命名空间(。