2012-02-29 9 views
2

私はasio documentationにある非同期タイムアウトの例を見てきましたが、非同期読み取り(最大Nバイト)をタイムアウトにすることが可能かどうか疑問に思っていましたタイムアウトが発生した場合は、エラーコードの代わりにタイムアウトが発生するまで読み出したバイトのバッファを返します。ソケット - できるだけタイムアウトで読み取る

たとえば、10秒間のタイムアウトで1000バイトの読み取り(recv)を実行していて、10秒間に300バイトしか到着しない場合は、その300バイトが返されるようにしたいと思います。 asioを使って?あるいはバークレーソケットのインターフェースでさえ?

+0

これは決して賢明なことではありません。あなたの外の問題は何ですか?ほぼ確実にそれに対するより良い解決策があります。 –

+0

バークレーソケットの場合、バッファにデータがない場合はタイムアウトになるので、受信したNバイトまたは希望の時間が経過するまで読み取りを続けます。部分的な読み取りが終わるたびに、タイムアウト値と要求バイト数の両方を更新する必要があります。ブロッキングソケットを使用して非asioソリューションに興味があるかどうかわからないので、例を挙げません。 – tomasz

答えて

-1

はい、あなたはそれを行うことができます。

  1. は、あなたがまだ読んでいないまでしかし、多くのバイトを読み込むasio要求を設定します。

  2. asioタイマは、時間がなくなるまで多くの時間で起動するように設定します。

  3. 読み込みヒットが必要なバイト数を満たす場合は、タイマーをキャンセルします。

  4. 部分読み取りを取得する場合は、別の部分読み取りと別のタイマーを設定します。

しかし、これは決して賢明なことではありません。これが解決すると思われる外部の問題が何であれ、ほぼ確実に良い解決策があります。

+4

downvoteを説明してください。私が間違っているなら、私は自分自身を正したいと思います。あなたが間違っているなら、私はあなたを訂正したいと思います。より良い方法があれば、私はそれを知りたいです。私が不明な場合は、明確にしたいと思います。 –

+0

+1これは決して賢明なことではありません –