2013-04-26 118 views
1

这个问题与我以前的另一个问题有关。boost asio异步写入处理函数自己调用

完成写入操作时写入的boost :: asio :: async_write处理函数本身可能会导致写操作问题?

例如

void on_write(const boost::system::error_code & error_code){ 
    if (! error_code){ 
    std::string some_data_to_transfer("hello world"); 
    std::vector<char> vec_buf(some_data_to_transfer.begin(),some_data_to_transfer.end()); 
    boost::asio::async_write(this->socket,boost::asio::buffer(vec_buf), 
    boost::asio::transfer_exactly(vec_buf.size()), 
    boost::bind(&Server::on_write,this->shared_from_this(), 
    boost::asio::placeholders::error)); 
    } 
} 

回答

4

不,这不会造成任何问题。事实上,这样做有很多理由。示例是一个基于TCP的文件服务器,在文件的每个部分都被传输时,您将读取文件的下一部分并将其写入网络。

有一点需要注意:你有未定义的行为,因为你正在使用的缓冲区(vec_buf)在调用完成之前被破坏。通常,你会使vec_buf成为有问题的类的成员。