1

这个问题与我之前的另一个问题有关。

写操作完成时调用的 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

1 回答 1

4

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

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

于 2013-04-26T11:30:59.690 回答