繁体   English   中英

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

[英]How does a Linux socket buffer overflow?

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

我想知道的是Linux内核如何将数据包从套接字缓冲区中删除。 我假设套接字缓冲区本身是FIFO缓冲区。 但是,如果它已满,会发生什么? 是否会丢弃下一个数据包(缓冲区内容不会改变)? 或者新数据包会替换缓冲区中的旧数据包吗? 如果是,哪个数据包(最老的?,最年轻的?,一个随机选择的数据包?)?

感谢您的任何见解。

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

这只是JS Bangs答案的补充。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM