缓冲区溢出时会发生什么
What happens on buffer overflow?
我在某处读到,每个TCP连接都有自己的125kB输出和输入缓冲区。如果这个缓冲区已满,而我仍然在linux上发送数据,会发生什么?
根据http://www.kernel.org/doc/man-pages/online/pages/man2/send.2.html数据包只是悄悄地丢弃,没有通知我。我该怎么办才能阻止这种情况发生?有没有什么方法可以查明我的至少一些数据是否发送正确,以便我可以在以后的时间点继续?
简单的答案是这样的。TCP套接字上的"send"调用将被阻止,直到远程端点接收和使用数据导致TCP滑动窗口(或内部队列缓冲区)打开。这与试图以比磁盘保存速度更快的速度将字节写入文件没有太大区别
如果您的套接字配置为非阻塞模式,则send将返回EWOULDBLOCK或EAGAIN,直到可以发送数据为止。标准的轮询、选择和epoll调用将按预期工作,以便您知道何时再次"发送"。
我不知道"数据包被丢弃了"。我认为更有可能的是,程序对write()的调用将阻塞或返回失败。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- GetModuleFilenameEx返回0,getlasterror返回溢出错误.我究竟做错了什么
- 当i++导致整数溢出时会发生什么
- 缓冲区溢出时会发生什么
- 我的溢出()实现有什么问题
- 在这种情况下,溢出是什么意思
- 如果STDOUT缓冲区溢出会发生什么
- 指针下溢或溢出时会发生什么情况
- 不同的编译器用来处理数字转换中的溢出的常见策略是什么?
- 我的while程序溢出了?我做错了什么?
- 在c++中检测缓冲区溢出源的最佳方法是什么?
- 什么时候需要检查整数溢出
- 是什么原因导致此缓冲区溢出警告超过64位VS2012编译环境
- 是什么导致了 fprintf 的C++缓冲区溢出错误