缓冲区溢出会发生什么?

2 c++ sockets linux buffer tcp

我在某处读到每个TCP连接都有自己的125kB输出和输入缓冲区.如果这个缓冲区已满,我还会继续在linux上发送数据会怎么样?

根据http://www.kernel.org/doc/man-pages/online/pages/man2/send.2.html,数据包只是默默地丢弃,没有通知我.我该怎么做才能阻止这种情况发生?有没有办法找出我的数据是否已经正确发送,以便我可以在以后的某个时间点继续?

sel*_*bie 7

简短的回答是这样的.由于远程端点接收和使用数据,TCP套接字上的"发送"调用将一直阻塞,直到TCP滑动窗口(或内部队列缓冲区)打开.与尝试将字节写入文件的速度与磁盘可以保存的速度相比没有多大区别.

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