我有一個關於recv(C,Android)的問題。recv()是否總是返回一個具有預期長度的完整數據包?
recv保證在返回時返回一個完整的UDP數據報嗎?
在我的情況我使用recv從套接字讀取RTP數據包。每個RTP數據包的預期長度爲172(有效負載爲160字節,報頭爲12字節)。但是,我不確定是否有保證,當recv返回數據時我會得到完整的172個字節。
任何人都可以確認/評論嗎?
我有一個關於recv(C,Android)的問題。recv()是否總是返回一個具有預期長度的完整數據包?
recv保證在返回時返回一個完整的UDP數據報嗎?
在我的情況我使用recv從套接字讀取RTP數據包。每個RTP數據包的預期長度爲172(有效負載爲160字節,報頭爲12字節)。但是,我不確定是否有保證,當recv返回數據時我會得到完整的172個字節。
任何人都可以確認/評論嗎?
每POSIX,recv
返回整個UDP數據包,除非和錯誤發生或整個數據包的緩衝區太小。您可以通過設置MSG_TRUNC
標誌來檢測這個標誌,這會導致recv
返回幀的實際的數據長度,您可以將其與緩衝區大小進行比較。
是的。一個UDP數據報在一次recv()調用中完整接收,並且完全接收,或者完全不接收。
您可能會發現這個問題[UDP允許重新分組嗎?](http://stackoverflow.com/questions/15939796/does-udp-allow-repacketization)也有趣。 –