提升::ASIO 接受套接字错误已打开

boost::asio accepting socket error already open

本文关键字:错误 ASIO 提升 套接字      更新时间:2023-10-16

不确定是什么导致了此错误Already Open

#include "AsyncServer.h"

AsyncServer::AsyncServer(boost::asio::io_service& io_service, std::string ip, unsigned short port)
    : acceptor(io_service, tcp::endpoint(boost::asio::ip::address_v4::from_string(ip), port))
{
    BeginAccept();
}

AsyncServer::~AsyncServer()
{
}

void AsyncServer::BeginAccept(){
    tcp::socket temp = tcp::socket(acceptor.get_io_service());
    acceptor.async_accept(temp, boost::bind(&AsyncServer::EndAccept, this, boost::asio::placeholders::error));
}
void AsyncServer::EndAccept(const boost::system::error_code& error){
    if (!error)
    {
        //continue with connection
        std::cout << "connected" << std::endl;
    }
    else
    {
        std::cout << error.message() <<std::endl;
    }
    BeginAccept();
}

我想做的是将套接字和错误传递给EndAccept但它坏了,错误Already Open,我不知道这里出了什么问题!

temp是一个

本地对象,它会在退出BeginAccept立即被销毁。这意味着async_accept使用未定义的行为。

temp成为成员(给它起更有意义的名字也是一个好主意)。