这一章的难点是理解每个参数的物理意义。
一边问google一边问百度,感觉有些理解了,但又有些模糊。
真是纸上得来终觉浅,绝知此事要躬行。
不管怎么样,先简单了解下。
接口:
#include <sys/types.h>
#include <sys/socket.h>
int getsockopt(int s,
int level,
int optname,
const void* optval,
socklen_t *optlen);
int setsockopt(int s,
int level,
int optname,
const void* optval,
socklen_t optlen);
Level 与 Option Name
SOL_SOCKET SO_REUSEADDR
SOL_SOCKET SO_KEEPALIVE
SOL_SOCKET SO_LINGER
SOL_SOCKET SO_BROADCAST
SOL_SOCKET SO_OOBINLINE
SOL_SOCKET SO_SNDBUF
SOL_SOCKET SO_RCVBUF
SOL_SOCKET SO_TYPE
SOL_SOCKET SO_ERROR
SOL_TCP SO_NODELAY
详细解释:
SO_SNDBUF 控制发送端缓冲区大小。
SO_RCVBUF 控制接收端缓冲区大小
注意:
1> 设置值必须满足一个 最大值与最小值, 本地写代码测试后发现是[256, 4* 1024* 1024]
查看文档,发现最大值是下面2个内核参数控制:
/proc/sys/net/core/rmem_max r:read 接收端
/proc/sys/net/core/wmem_max w:write 发送端
进一步可以执行:获取3个值 最小值 默认值 最大值
cat /proc/sys/net/ipv4/tcp_wmem
cat
/proc/sys/net/ipv4/tcp_rmem
UDP的话,是下面3个: (意思还不是很明确)
cat /proc/sys/net/ipv4/udp_mem
cat
/proc/sys/net/ipv4/udp_rmem_min
cat
/proc/sys/net/ipv4/udp_wmem_min
2> 在这个区间内,获取值为设置值的2倍。即调用set(10000)后,get返回值为20000.
Linux Socket Programming by Example-第十二章 设置socket参数,布布扣,bubuko.com