2014-05-16 16 views
3

我有一個關於recv(C,Android)的問題。recv()是否總是返回一個具有預期長度的完整數據包?

recv保證在返回時返回一個完整的UDP數據報嗎?

在我的情況我使用recv從套接字讀取RTP數據包。每個RTP數據包的預期長度爲172(有效負載爲160字節,報頭爲12字節)。但是,我不確定是否有保證,當recv返回數據時我會得到完整的172個字節。

任何人都可以確認/評論嗎?

+0

您可能會發現這個問題[UDP允許重新分組嗎?](http://stackoverflow.com/questions/15939796/does-udp-allow-repacketization)也有趣。 –

回答

2

每POSIX,recv返回整個UDP數據包,除非和錯誤發生或整個數據包的緩衝區太小。您可以通過設置MSG_TRUNC標誌來檢測這個標誌,這會導致recv返回幀的實際的數據長度,您可以將其與緩衝區大小進行比較。

0

是的。一個UDP數據報在一次recv()調用中完整接收,並且完全接收,或者完全不接收。

相關問題