提升asio异步写入处理程序调用自身

时间:2013-04-26 11:20:46

标签: c++ boost asynchronous tcp 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));
   }
 }

1 个答案:

答案 0 :(得分:4)

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

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