我有一个关于recv(C,Android)的问题。
recv保证在返回时返回完整的UDP数据报吗?
在我的情况下,我使用recv从套接字读取RTP数据包。每个RTP分组的预期长度是172(有效载荷为160字节,头部为12字节)。但是,我不确定我是否保证当recv返回数据时我将获得完整的172个字节。
任何人都可以确认/评论吗?
答案 0 :(得分:2)
每个POSIX,recv
返回整个UDP数据包,除非发生错误或缓冲区对于整个数据包来说太小。您可以通过设置MSG_TRUNC
标志来检测到这一点,这会导致recv
返回帧的实际数据长度,您可以将其与缓冲区大小进行比较。< / p>
答案 1 :(得分:0)
是。在单个recv()调用中完整地接收UDP数据报,或者完全不接收。