Re[2]: BOOST.ASIO
От: paxerus  
Дата: 21.05.10 10:10
Оценка:
Здравствуйте, in trance, Вы писали:

IT>Здравствуйте, paxerus, Вы писали:


P>>пишу так возникает ошибка

P>>
P>>std::string answer("ertertertertertert");
P>>                ba::async_write(socket_,ba::buffer(answer),
P>>                        boost::bind(&connection::SendAnswer,
P>>                                        shared_from_this()));
P>>


IT>Исходники не смотрел, но судя по всему answer долго не живет, т.е. вызывается деструктор раньше, чем asio отправляет данные. Сделай его как мембер класса.


так и думал что из за этого но такое простое решение как засунуть в класс не пришло в мою голову спасибо стало нормально ,еще один вопрос есть
не буду мучать скачанием исходника, поэтому кусочек кода выложу тут


void connection::ReciveHeader(const bs::error_code& err, size_t len)
{    if(!err)
    {
                answer="ertertertertertert";
                ba::async_write(socket_,ba::buffer(answer),
                        boost::bind(&connection::SendAnswer,
                                        shared_from_this()));

   }

}
void connection::SendAnswer()
{    socket_.close();
    shared_from_this().reset();
}

void connection::run() 
{

    try 
    {
              async_read(socket_, ba::buffer(HeaderBuff), ba::transfer_at_least(1),
               boost::bind(&connection::ReciveHeader,
                           shared_from_this(),
                           ba::placeholders::error,
                           ba::placeholders::bytes_transferred));
                    

    } catch(std::exception& x) {
        
    //        std::cerr << "Exception: " << x.what() << std::endl;
        }
    }


меня волнует нормально будет если я

socket_.close();
shared_from_this().reset();

расположу в функции SendAnswer ???
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.