(Linux 3.0,x86_64)
如果我在连接的tcp套接字上停止调用 recv(2)一段时间,而另一台主机继续发送数据,那么可能这些数据是由内核接收和缓冲的,所以下一步时间我打电话给recv它会快速返回所有等待的数据。
我的问题是这个接收缓冲区有多大,它是如何工作的?我可以使用任何相关的内核或套接字设置来调整其行为吗? tcp堆栈在填满时会做什么?
答案 0 :(得分:2)
可以使用setsockopt(SO_RCVBUF)
更改接收缓冲区。默认大小由tcp_rmem sysctl控制。如果缓冲区填满,堆栈将停止将它提供的接收窗口扩展到另一侧,迫使另一个大小停止发送数据,直到缓冲区中有空间。