3

このエラーの原因がわかりません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ます。ここで何が問題なのかわかりません!

4

1 に答える 1

4

tempはローカル オブジェクトであり、終了時にすぐに破棄されBeginAcceptます。これは、async_accept未定義の動作であるダンギング参照で動作することを意味します。

メンバーを作成tempします (より意味のある名前を付けることもお勧めします)。

于 2013-09-12T19:22:11.823 に答える