我需要讀取最近傳入的UDP數據包,而不管讀取之間是否丟失數據包。傳入數據包比最大應用處理速度快3倍。爲了達到這個目的,我使用了Java的DatagramSocket
類的setReceiveBufferSize(int size)
來設置SO_RCVBUF
與我預期的數據包大小相同。通過在Java DatagramSocket中禁用SO_RCVBUF來讀取最新的UDP數據包?
但是,在我得到最近的數據包之前仍有三個數據包延遲(如果傳入速率是接收速率的10倍,則有10個數據包延遲)。這表明SO_RCVBUF
包含的不僅僅是最新的數據包。
首先,setReceiveBufferSize(int size)
的單位是字節嗎? javadocs中沒有明確說明。其次,是否有一種方法可以禁用SO_RCVBUF
,以便我只收到最近的傳入數據包?例如,零是函數的非法參數,但理論上我可以將接收緩衝區大小設置爲1。
那麼,請記住,套接字保留_oldest_數據,而不是最新的。如果一個數據包到達套接字,那麼它將被緩存直到您讀取它 - 您無法更改該行爲。 (如果套接字緩衝區中沒有空間,則較新的數據包將被丟棄) – nos 2012-07-14 21:00:29
啊,謝謝,我不知道。讀取之前有沒有辦法清除SO_RCVBUF? – user1525606 2012-07-14 21:15:49