TCP套接字option说明


SO_KEEPALIVE

连接保活属性,开启时,在tcp链路没数据发送时,定期发送探测数据包用于检查连接是否可用。 默认本属性是关闭的。
参数默认值:
net.ipv4.tcp_keepalive_time=7200
net.ipv4.tcp_keepalive_intvl=75
net.ipv4.tcp_keepalive_probes=9

SO_RCVBUF/SO_SNDBUF

SO_RCVBUF是接收缓冲区size,SO_SNDBUF是发送缓冲区size。
对于客户,这意味着SO_RCVBUF选项必须在调用connect之前设置
对于服务器,这意味着SO_RCVBUF选项必须在调用listen之前给监听套接字设置
发送缓冲区大小:SNDBufSize = 212992 // 默认
接收缓冲区大小:RCVBufSize = 212992 // 默认

用以下命令可以查本系统的默认socket缓冲区size

## centos内核3.10.0
[root@cppcloud ~]# cat /proc/sys/net/core/wmem_default
212992
[root@cppcloud ~]# cat /proc/sys/net/core/wmem_max
212992
[root@cppcloud ~]# cat /proc/sys/net/core/rmem_default
212992
[root@cppcloud ~]# cat /proc/sys/net/core/rmem_max
212992

SO_RCVLOWAT/SO_SNDLOWAT

接收低水位/发送高水位 (byte)
接收数据时只有接收区中的数据超过SO_RCVLOWAT才会给用户层返回;
发送数据时只有发送缓冲区的数据超过SO_SNDLOWAT才会数据发至网络上;
默认值: 1、2048

SO_RCVTIMEO/SO_SNDTIMEO

接收超时时间/发送超时时间
设置为0时是阻塞状态,直到有数据或出错才返回
默认值:0

SO_REUSEADDR

服务端地端口重用
默认是关闭的

服务端程序一般需要设置,否则当进程重启时,旧端口释放完全才能重新在同一端口监听,中间要等时间比较长。

TCP_MAXSEG

接收最大出站 TCP 数据段size。如果这个选项在建立连接前的设置,它将改变发送到另一端初始信息包中的 MSS 值。这个值大于 MTU 接口值将被忽略而不起作用。

TCP_NODELAY

禁止TCP发送时的Nagle算法,默认该算法是启动
Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块

SO_LINGER

控制close系统调用在关闭TCP连接时的行为
默认是关闭的,close()调用立即返回
引用一张图说明
tcp_linger_option

其他

另外说明一下tcp的几个定时器:
tcp_timers

/latefirstcmt/23