缓冲区溢出时会发生什么

What happens on buffer overflow?

本文关键字:什么 溢出 缓冲区      更新时间:2023-10-16

我在某处读到,每个TCP连接都有自己的125kB输出和输入缓冲区。如果这个缓冲区已满,而我仍然在linux上发送数据,会发生什么?

根据http://www.kernel.org/doc/man-pages/online/pages/man2/send.2.html数据包只是悄悄地丢弃,没有通知我。我该怎么办才能阻止这种情况发生?有没有什么方法可以查明我的至少一些数据是否发送正确,以便我可以在以后的时间点继续?

简单的答案是这样的。TCP套接字上的"send"调用将被阻止,直到远程端点接收和使用数据导致TCP滑动窗口(或内部队列缓冲区)打开。这与试图以比磁盘保存速度更快的速度将字节写入文件没有太大区别

如果您的套接字配置为非阻塞模式,则send将返回EWOULDBLOCK或EAGAIN,直到可以发送数据为止。标准的轮询、选择和epoll调用将按预期工作,以便您知道何时再次"发送"。

我不知道"数据包被丢弃了"。我认为更有可能的是,程序对write()的调用将阻塞或返回失败。