SO_REUSEADDR选项
经过setsockopt设置了SO_REUSEADDR选项后,即使当前套接字处于TIME_WAIT状态,与之绑定的socket地址也可以被立即重用。此外,我们也可以通过修改内核参数/proc/sys/net/ipv4/tcp_tw_recycle来快速回收被关闭的socket,从而使得TCP连接根本不进入TIME_WAIT状态,进而允许应用程序立即重用本地的socket地址。
SO_RECVBUF和SO_SNDBUF选项
SO_RECVBUF和SO_SNDBUF选项分别表示TCP接收缓冲区和发送缓冲区的大小。只是,但我们使用setsockopt来设置TCP的接收缓冲区和发送缓冲区的大小时,系统都会将其值加倍,并且TCP的发送缓冲区的最小值是256字节,而发送缓冲区的最小值是2048字节。
注意:
可以通过强制修改内核参数:
1 | /proc/sys/net/ipv4/tcp_rmem |
来修改TCP的接收和发送缓冲区。
SO_RCVLOWAT和SO_SNDLOWAT选项
SO_RCVLOWAT和SO_SNDLOWAT选项分别表示TCP接收缓冲区和发送缓冲区的底水位标记。它们一般被I/O复用系统调用来判断socket是否可读或可写。
- 当TCP接收缓冲区中可读数据总数大于其低水位的标记时,I/O复用系统调用将通知应用程序可以从对应的socket上读取数据了。
- 当TCP发送缓冲区空闲的空间大于其低水位标记时,,I/O复用系统调用将通知应用程序可以往对应的socket上写数据了
默认情况下,TCP缓冲区的低水位标记和TCP发送缓冲区的底水位标记均为1字节。