Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
对于单线程服务器,我有下面的代码。我想知道,如果我收到一个数据包(并开始处理它)并且另一个数据包到达,而我没有在听(忙于处理)会发生什么。操作系统会缓冲数据包并等待套接字再次侦听,还是丢弃数据包?
While(true){ UDPsocket.receive(packetBuff); //Do stuff }
注意:该应用程序在 Linux(Ubuntu 12.04) 上运行
操作系统有一个接收缓冲区,当您的程序繁忙时,它可以在其中存储数据。您可以使用getsockopt()该SO_RCVBUF选项来查看/更改接收缓冲区大小以及SO_SNDBUF发送缓冲区。通常有一个系统范围的默认值,以及您可以为此设置的系统范围的最大大小。
getsockopt()
SO_RCVBUF
SO_SNDBUF
默认值是什么,以及如何查看取决于您使用的操作系统。默认值通常介于 32K 和 256K 之间,它将为您缓冲数据。
数据包将被放入队列并在您收到当前数据包后检索。