UDP socket.receive开始收集或获取可用吗?

时间:2018-03-25 23:54:27

标签: sockets network-programming udp

我有一个线程(在android -Wifi上)接收每40ms发送一次的UDP数据包流。捕获数据包后,线程将对数据进行处理,并在40ms内恢复接收。

网络层是否仅在调用socket.receive后接受UDP数据包,或者存储数据包(在缓冲区内)直到socket.receive声明它? (我知道缓冲区有大小并会丢弃旧的)(我也知道如果没有可用的话它会等待)

换句话说,我是否需要使用双接收线程?

1 个答案:

答案 0 :(得分:1)

  

网络层是否仅在调用后接受UDP数据包   socket.receive,或者它存储数据包(在缓冲区内)直到a   socket.receive声称它?

后者。每个UDP套接字都有一个传入数据缓冲区,只要您将UDP套接字绑定到端口,网络堆栈接收的任何UDP数据包都将被放入此缓冲区(假设缓冲区中仍有足够的可用空间用于要适合的数据包)。无论您的应用程序是否曾拨打recv(),都会将收到的数据包添加到缓冲区。

调用recv()只会导致缓冲区中最旧的UDP数据包被移出缓冲区并进入传递给recv()的数组。