OS是否缓冲UDP的数据包

时间:2012-11-27 04:40:59

标签: java sockets buffer

对于单线程服务器,我有以下代码。我想知道,如果我收到一个数据包(并开始处理它)并且另一个数据包到达时会发生什么,而我没有收听(忙于处理)。 os是否会缓冲数据包并等待套接字再次监听,或者数据包是否丢弃?

            While(true){
                UDPsocket.receive(packetBuff);
                //Do stuff
            }

注意:应用程序在Linux上运行(Ubuntu 12.04)

2 个答案:

答案 0 :(得分:2)

操作系统有一个接收缓冲区,可以在程序繁忙时存储数据。您可以使用getsockopt()SO_RCVBUF选项来查看/更改接收缓冲区大小,以及发送缓冲区的SO_SNDBUF。通常有系统范围的默认值,您可以为此设置系统范围的最大大小。

默认值是什么,以及如何查看这取决于您使用的操作系统。默认值通常介于32K到256K之间,它将为您缓冲。

答案 1 :(得分:1)

数据包将被放入队列中,并在收到当前数据包后进行检索。