我将数据异步发送到TCP套接字。在上一个数据报告为由完成处理程序发送之前发送下一个数据块是否有效?
据我所知,当从不同的线程发送时不允许这样做。在我的情况下,所有发送都是从同一个线程完成的。
我的客户端的不同模块将数据发送到同一个套接字。例如。 module1发送了一些数据,并在调用相应的完成处理程序时继续。在io_service
调用module2的deadline_timer
处理程序之前,这会导致另一个async_write
调用。我应该在这里遇到任何问题吗?
答案 0 :(得分:1)
在上一个数据之前发送下一个数据是否有效 报告是由完成处理程序发送的?
否则对交错写操作无效。 documentation
中的非常清晰此操作是根据对零的或多个调用实现的 stream的
async_write_some
函数,被称为组合 操作。 程序必须确保流不执行任何其他操作 写操作(例如async_write
,流的async_write_some
函数或执行写入的任何其他组合操作直到 此操作完成。
我强调了。
据我所知,当发送不同时,不允许这样做 线程。在我的情况下,所有发送都是从同一个线程完成的。
您的问题与线程无关。
答案 1 :(得分:0)
是的,只要在调用写入处理程序之前不修改底层内存(缓冲区),就可以这样做。调用async_write
意味着您将缓冲区所有权移交给Asio。调用写入处理程序时,缓冲区所有权将返回给您。