2012-02-29 59 views
2

我看了一下asio documentation中發現的異步超時示例,但我想知道是否可以放置異步讀取(最多N個字節)的S秒,但是如果發生超時,它將返回讀取的字節緩衝區,直到發生超時而不是錯誤代碼。套接字 - 儘可能多地讀取超時

例如,如果我要執行1000字節的讀取(recv),超時時間爲10秒,並且在10秒鐘後纔到達300字節,我希望返回300字節 - 這是可能的使用asio?甚至是伯克利插座接口?

+0

這幾乎從來都不是一件明智的事情。你外在的問題是什麼?幾乎肯定有更好的解決方案。 – 2012-02-29 05:48:38

+0

對於berkeley套接字,如果緩衝區中沒有數據,則會發生超時,因此您會一直讀取,直到收到N個字節或所需的時間過去。每次部分讀取後,您必須更新超時值和請求字節數。沒有舉一個例子,因爲不知道你是否對使用阻塞套接字的非asio解決方案感興趣。 – tomasz 2012-03-03 01:03:08

回答

-1

是的,你可以做到這一點:

  1. 搭建asio請求讀取高達您還沒有閱讀然而,許多字節。

  2. 設置一個asio定時器在無論多少時間都會觸發,直到時間耗盡爲止。

  3. 如果您得到的讀取命中滿足您需要的字節數,請取消定時器。

  4. 如果您得到部分讀取,請設置另一個部分讀取和另一個定時器。

但是,這幾乎從來都不是一個明智的做法。無論你的外在問題是你認爲解決的問題,幾乎肯定會有更好的解決方案。

+4

請解釋downvote。如果我不正確,我想糾正自己。如果你不正確,我想糾正你。如果有更好的方法,我想知道它。如果我不清楚,我想澄清一下。 – 2012-03-01 01:43:30

+0

+1對此幾乎是不明智的事情 – 2012-03-04 16:28:16