2010-01-12 55 views
3

看來,自1.40.0上調以來,async_read_some()調用的方式發生了變化。你可以傳入一個null_buffer,當有數據需要讀取時,你會得到一個回調,但沒有框架讀取數據到任何緩衝區(因爲沒有一個!)。這基本上允許你編寫代碼,它的行爲就像一個select()的調用,在那裏你會被告知你的套接字什麼時候有一些數據。如何在不讀取緩衝區的情況下讀取boost.asio流中的某些數據時獲取回調?

在新代碼的行爲已更改以下列方式工作:

如果所有緩衝區中的順序MB總大小爲0,異步讀取操作將立即完成並通過0作爲處理程序的參數,指定讀取的字節數。

這意味着我的舊的(並且順便說一下,在​​中顯示的方法)在套接字上檢測數據的方式不再有效。對我而言,問題在於我需要一種檢測這種方式的方式,因爲我已將自己的流類分層放置在asio套接字流的頂層,因此,我不能只從我的流期望的套接字中讀取數據。我現在唯一能想到的解決方法是讀取一個字節,存儲它,當我的流類請求一些字節時,如果設置了一個字節,則返回該字節:不是很漂亮。

有誰知道在最新的boost.asio代碼下實現這種行爲的更好方法嗎?

+0

你確定是這種情況? 因爲否則它顯然是一個錯誤,應該向ASIO維護者報告,因爲 null_buffer的孔目的是爲了支持「Select like/Reactor」操作。 – Artyom 2010-01-31 10:26:16

回答

1

我的快速測試與升壓1.41作品的官方例子。所以我認爲還是應該工作(如果你使用null_buffers)

相關問題