4

私はboost::asioを使用してリストをクライアントに送信し、終了したらソケットを閉じています。どういうわけか、クライアントはすべてを受信する前にファイルの終わりエラーを受け取ることがあります

これは、最後のリストエントリを送信した直後にサーバーがソケットを閉じることに関係していると思います。この async_send を解決して、データが正常に送信された後にのみハンドラーを呼び出す簡単な方法はありますか?

それとも、End Of File エラーが別の原因で発生しているのでしょうか?

4

1 に答える 1

2

Boost.Asio は、TCP および UDP ソケット上のオペレーティング システムに依存しない抽象化レイヤーです。他のアプリケーションがデータを受信して​​処理したことを保証するものではありません。このロジックをアプリケーションに含める必要があります。OSI モデルを検討することをお勧めします。

async_send()リターンの直後にソケットを閉じている場合、これは正しくありません。完了ハンドラーが呼び出された後にのみ閉じる必要があります。

于 2013-01-20T04:15:38.407 に答える