2011-01-31 1 views
1

私は混合モードプロトコル(メタ情報、ハンドシェイク、確認応答などのためのラインプロトコルとデータのバイナリ)を持つアプリケーション層プロトコルを最適化しようとしています。クライアントはACKを待っている状態では、私はuntill_crlf_maxbytes_1024_match_conditionhereを文書化async_read_untilするacxcording実装されboost asio async_read_until:カスタムMatchConditionからエラーを発生させる方法は?

async_read_until(socket, buffer, untill_crlf_maxbytes_1024_match_condition, handler); 

を行います。

ここで考えられるのは、CR + LFまで読むことですが、1024バイトしか読み込めないので、何か気になることが起こっても、ソケットに何らかの迷惑があっても、読書はできません。

私の質問は、このようなシナリオではエラーuntill_crlf_maxbytes_1024_match_conditionからエラーを発行することをお勧めしますか?そのシナリオでエラーを発生させるにはどうすればよいですか?最高の選択肢は何ですか?

答えて

0

エラーが発生しました例外がスローされます?もしそうなら、それは悪い考えです。なぜなら、boost asioのほとんどの機能には、例外を投げてエラーコードを返すという2つのバージョンがあるからです。エラーコードは、boost asioの非同期性に非常に役立ちます。

match conditionからエラーを含むtrueを返すことができます。あなたのエラーをチェックしてくださいhandler

+0

私はリンクされたドキュメントから理解していますが、boolの戻り値はasync_readが停止できるかどうかを示唆しています。それは実際にエラーがあったことをハンドラに伝えません。エラーとは、これまでに読んだ1024バイトでCR + LFが見つからなかったということです。 –

+0

@CodeMedicあなたのハンドラは1024バイトより大きい 'bytes_transferred'プレースホルダに基づいてエラーを推測できると思います。 –

+0

@CodeMedic、@Sam Miller:またはその他の便利な方法で、グローバルフラグなどを設定するまでboost :: asioはあなたにこのような機能を提供しません。 –

関連する問題