1

对于单线程服务器,我有下面的代码。我想知道,如果我收到一个数据包(并开始处理它)并且另一个数据包到达,而我没有在听(忙于处理)会发生什么。操作系统会缓冲数据包并等待套接字再次侦听,还是丢弃数据包?

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

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

4

2 回答 2

2

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

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

于 2012-11-27T04:46:17.733 回答
1

数据包将被放入队列并在您收到当前数据包后检索。

于 2012-11-27T04:46:37.263 回答