这个问题与我之前的另一个问题有关。
一个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));
}
}
答案 0 :(得分:4)
不,它不会造成任何问题。事实上,有很多理由这样做。例如,基于TCP的文件服务器,在传输文件的每个部分时,您将读取文件的下一部分并将其写入网络。
有一点需要注意:您有未定义的行为,因为您正在使用的缓冲区(vec_buf)在调用完成之前被破坏。通常,您可以使vec_buf成为相关类的成员。