gpt4 book ai didi

c++ - boost::asio 接受套接字错误已经打开

转载 作者:太空狗 更新时间:2023-10-29 21:01:20 24 4
gpt4 key购买 nike

我不确定是什么导致了这个错误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 成为成员(给它起一个更有意义的名字也是个好主意)。

关于c++ - boost::asio 接受套接字错误已经打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com