Linux套接字缓冲区如何溢出?

我有一个从Linux 64位平台(2.6.18)上的多播套接字读取的Java阅读器应用程序。 套接字大小已被设置为2 MB。 当阅读器读不到足够快时,套接字“溢出”,即数据包从缓冲器中丢弃。

我想知道的是Linux内核如何将数据包从套接字缓冲区中取出。 我假设套接字缓冲区本身是一个FIFO缓冲区。 但是,如果满了会发生什么? 下一个数据包是否会被丢弃(并且缓冲区内容不会改变)? 或者将新的数据包replace缓冲区中的旧数据包? 如果是的话,哪个数据包(最老的?,最年轻的?,一个随机select的数据包?)?

感谢您的任何见解。

Solutions Collecting From Web of "Linux套接字缓冲区如何溢出?"

当缓冲区满时,传入的数据包将被丢弃。 已经在缓冲区中的数据包不会被修改或替换。

除了JS Bangs的答案之外。

这不是网络堆栈中可以丢弃数据包的唯一地方。 套接字接收缓冲区在层次结构中很高,并且是特定于用户套接字的。 靠近硬件的另一个地方(至少在Linux中)是设备驱动程序和NET_RX softirq之间的队列(请参阅netif_rx() 。)这些丢弃将有助于netstat -i输出中的RX-DRP列。