在调用前一个完成处理程序之前异步发送数据是否有效?

时间:2011-10-12 10:34:32

标签: c++ sockets boost boost-asio asyncsocket

我将数据异步发送到TCP套接字。在上一个数据报告为由完成处理程序发送之前发送下一个数据块是否有效?

据我所知,当从不同的线程发送时不允许这样做。在我的情况下,所有发送都是从同一个线程完成的。

我的客户端的不同模块将数据发送到同一个套接字。例如。 module1发送了一些数据,并在调用相应的完成处理程序时继续。在io_service调用module2的deadline_timer处理程序之前,这会导致另一个async_write调用。我应该在这里遇到任何问题吗?

2 个答案:

答案 0 :(得分:1)

  

在上一个数据之前发送下一个数据是否有效   报告是由完成处理程序发送的?

否则对交错写操作无效。 documentation

中的非常清晰
  

此操作是根据对零的或多个调用实现的   stream的async_write_some函数,被称为组合   操作。 程序必须确保流不执行任何其他操作   写操作(例如async_write,流的async_write_some   函数或执行写入的任何其他组合操作直到   此操作完成

我强调了。

  

据我所知,当发送不同时,不允许这样做   线程。在我的情况下,所有发送都是从同一个线程完成的。

您的问题与线程无关。

答案 1 :(得分:0)

是的,只要在调用写入处理程序之前不修改底层内存(缓冲区),就可以这样做。调用async_write意味着您将缓冲区所有权移交给Asio。调用写入处理程序时,缓冲区所有权将返回给您。