Linux Socket Programming by Example-第十二章 设置socket参数

这一章的难点是理解每个参数的物理意义。

一边问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参数,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。