![](/img/trans.png)
[英]Write:Unitialized Error when performing boost::asio::async_write
[英]When performing an async_write with a tcp socket, when is the handler called?
這只是async_write如何與tcp套接字一起運行的簡單問題。 基本上,當使用tcp套接字時,在將數據寫入套接字時,或者從目標接收到ack時,是否會調用寫入處理程序?
AFAIK,只要數據寫入套接字的內核緩沖區,就會調用處理程序。
與BSD套接字的send()
行為相同 - 它在操作系統具有數據副本時完成。 這將在ACK之前。
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完成。 我認為你需要高層原型。 如果遠程對等程序打破了您的請求包,則ACK也不適合您的需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.