簡體   English   中英

使用tcp套接字執行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操作的方案。 以下任何序列都是可能的:

  1. async_write操作1完成。
  2. 調用了操作1的處理程序。
  3. async_write操作2完成。
  4. 調用了操作2的處理程序。
  1. async_write操作1完成。
  2. async_write操作2完成。
  3. 調用了操作1的處理程序。
  4. 調用了操作2的處理程序。
  1. async_write操作1完成。
  2. async_write操作2完成。
  3. 調用了操作2的處理程序。
  4. 調用了操作1的處理程序。

我認為你需要高層原型。 如果遠程對等程序打破了您的請求包,則ACK也不適合您的需要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM