2012-02-03 70 views
1

(Linux 3.0上,x86_64的)Linux 3.0的TCP堆栈接收缓冲区的内核体系结构

如果我不停的叫的recv(2)对连接的TCP套接字一段时间,而其他主机持续发送数据,比想必这些数据是由内核接收和缓冲的,所以下一次我调用recv时,它会很快返回所有等待的数据。

我的问题是这个接收缓冲区有多大,它是如何工作的?我可以使用任何相关的内核或套接字设置来调整其行为吗? tcp堆栈填满时会做什么?

回答

2

接收缓冲区可以用setsockopt(SO_RCVBUF)进行更改。默认大小由sysctl的tcp_rmem控制。如果缓冲区填满,堆栈将停止扩展它提供给另一端的接收窗口,强制其他大小停止发送数据,直到缓冲区中有空间。