我有一个线程(在android -Wifi上)接收每40ms发送一次的UDP数据包流。捕获数据包后,线程将对数据进行处理,并在40ms内恢复接收。
网络层是否仅在调用socket.receive后接受UDP数据包,或者存储数据包(在缓冲区内)直到socket.receive声明它? (我知道缓冲区有大小并会丢弃旧的)(我也知道如果没有可用的话它会等待)
换句话说,我是否需要使用双接收线程?
答案 0 :(得分:1)
网络层是否仅在调用后接受UDP数据包 socket.receive,或者它存储数据包(在缓冲区内)直到a socket.receive声称它?
后者。每个UDP套接字都有一个传入数据缓冲区,只要您将UDP套接字绑定到端口,网络堆栈接收的任何UDP数据包都将被放入此缓冲区(假设缓冲区中仍有足够的可用空间用于要适合的数据包)。无论您的应用程序是否曾拨打recv()
,都会将收到的数据包添加到缓冲区。
调用recv()
只会导致缓冲区中最旧的UDP数据包被移出缓冲区并进入传递给recv()
的数组。