这只是一个简单的问题,即async_write如何使用tcp套接字。基本上,当使用tcp套接字时,在将数据写入套接字时,或者从目标接收到ack时,是否会调用写入处理程序?
答案 0 :(得分:4)
AFAIK,只要数据被写入套接字的内核缓冲区,就会调用处理程序。
答案 1 :(得分:2)
与BSD套接字send()
的行为相同 - 它在操作系统具有数据副本时完成。这将在ACK之前。
答案 2 :(得分:2)
Boost.Asio提供的唯一保证是操作完成时将调用处理程序。在async_write
的情况下,如果满足以下任何条件,则认为操作已完成:
socket_.cancel()
。操作完成后,将发布处理程序以进行延迟调用。但是,未指定完全何时以及调用处理程序的顺序。考虑已为2个不同套接字启动async_write
操作的方案。以下任何序列都是可能的:
async_write
操作1完成。async_write
操作2完成。async_write
操作1完成。async_write
操作2完成。async_write
操作1完成。async_write
操作2完成。答案 3 :(得分:0)
我认为您需要更高层的协议。如果远程对等程序破坏了您的请求包,则ACK也不符合您的需要。