recv()总是返回一个具有预期长度的完整数据包吗?

时间:2014-05-16 22:45:15

标签: android c sockets udp rtp

我有一个关于recv(C,Android)的问题。

recv保证在返回时返回完整的UDP数据报吗?

在我的情况下,我使用recv从套接字读取RTP数据包。每个RTP分组的预期长度是172(有效载荷为160字节,头部为12字节)。但是,我不确定我是否保证当recv返回数据时我将获得完整的172个字节。

任何人都可以确认/评论吗?

2 个答案:

答案 0 :(得分:2)

每个POSIX,recv返回整个UDP数据包,除非发生错误或缓冲区对于整个数据包来说太小。您可以通过设置MSG_TRUNC标志来检测到这一点,这会导致recv返回帧的实际数据长度,您可以将其与缓冲区大小进行比较。< / p>

答案 1 :(得分:0)

是。在单个recv()调用中完整地接收UDP数据报,或者完全不接收。