对于单线程服务器,我有以下代码。我想知道,如果我收到一个数据包(并开始处理它)并且另一个数据包到达时会发生什么,而我没有收听(忙于处理)。 os是否会缓冲数据包并等待套接字再次监听,或者数据包是否丢弃?
While(true){
UDPsocket.receive(packetBuff);
//Do stuff
}
注意:应用程序在Linux上运行(Ubuntu 12.04)
答案 0 :(得分:2)
操作系统有一个接收缓冲区,可以在程序繁忙时存储数据。您可以使用getsockopt()
和SO_RCVBUF
选项来查看/更改接收缓冲区大小,以及发送缓冲区的SO_SNDBUF
。通常有系统范围的默认值,您可以为此设置系统范围的最大大小。
默认值是什么,以及如何查看这取决于您使用的操作系统。默认值通常介于32K到256K之间,它将为您缓冲。
答案 1 :(得分:1)
数据包将被放入队列中,并在收到当前数据包后进行检索。