2013-01-20 25 views
4

我正在使用boost :: asio並向客戶端發送列表,並在完成時關閉套接字。不知怎的,客戶端有時收到所有內容之前得到一個文件結束錯誤。Boost.Asio - 確保其他方收到數據

我猜這與服務器在發送最後一個列表條目後關閉套接字有關。有沒有簡單的方法來解決這個async_send只有在數據成功發送後調用處理程序?

或者是我的文件結束錯誤來自其他東西?

+2

定義「完成時」。並向我們​​展示一些代碼。 – 2013-01-20 03:04:35

回答

2

Boost.Asio是一個基於TCP和UDP套接字的操作系統無關抽象層。它們不保證其他應用程序已收到並處理了數據。你需要在你的應用程序中包含這個邏輯,你可能想研究OSI model

如果您在async_send()返回後立即關閉套接字,則這是不正確的。只有在調用完成處理程序後才能關閉它。

+0

在完成處理程序中關閉它怎麼樣?這就是我在做atm,但似乎沒有工作。 – jhasse

+0

@jhasse關閉完成處理程序內部的套接字在語義上與調用它之後的關閉相同。如果您需要幫助,您應該在問題中發佈代碼。 –