网络编程练习-setsockopt&getsockopt

函数原型(linux man page):


sockfd:被配置的套接字描述符。

level:指定系统中解释选项的代码。

SOL_SOCKET:通用套接字选项。

IPPROTO_IP:IPv4套接字选项。

IPPROTO_IPV6:IPv6套接字选项。

IPROTP_TCP:TCP套接字选项。

optname:选项字段。

optval:指向配置或获取的配置信息的指针。

optlen:optval的长度。


1,通用套接字选项:

 a,SO_BROADCAST

 开启或禁止进程发送广播信息

       

 b,SO_DEBUG 

       只有TCP支持,开启后,内核将为TCP在该套接字发送和接收的所有分组的详细信息保存在kernel的一个环形buf中,可用trpt查看。

 c,SO_DONTROUTE

      开启本选项使外出的分组绕过底层协议觉得正常路由机制。

      路由守护进程(routed和gated)经常使用本选项来绕过路由表以强制将分组从指定接口送出

d,SO_ERROR

     进程可以通过此选项获取so_error(内核套接字发送错误将套接字的此变量设置为标准的unixerror)值,之后so_error复位为0。

e,SO_KEEPALIVE

    激活套接字的保活计时器

f,SO_LINGER

    指定close函数对面向连接的协议如果操作。

    默认是close立即返回,但是发送buf里面有数据残留,系统将试着将这些数据发送给对端。

    使用数据结构如下

#include <sys/socket.h>
struct linger{
     int     l_onoff;  //0 = off,nonzero = on
     int     l_linger; //linger time,seconds as units
}


e,SO_OOBINLINE

    开启时,带外数据将被留在正常的输入队列中(在线留存),这种情况下接受函数的MSG_OOB标志不能用来读带外数据。

f,SO_RCVBUF&SO_SNDBUF

    这两个选项更改套接字接收和发送缓冲区的大小。

g,SO_RCVLOWAT&SO_SNDLOWAT

    这两个选项修改接收和发送低水位大小(接收和发送时缓冲区最小大小)。供select函数使用。

h,SO_RCVTIMEO&SO_SNDTIMEO

    设置套接字的发送和接受超时值,使用timeval结构,影响read/readv/recv/recvfrom/recvmsg和write/writev/send/sendto/sendmsg。

i,SO_REUSEADDR&SO_REUSEPORT

    

j,SO_TYPE

    返回套接字的类型,如SOCK_STREAM/SOCK_DGRAM

l,SO_USELOOPBACK

    仅用于路由域套接字,默认打开,开启时,套接字将接收在其上发送的任何数据报的一个副本。

    

2,TCP套接字选项:

a,TCP_MAXSEG

    设置或获取TCP连接的最大分节大小(MSS),

b,TCP_NODELAY

    开启本选项将禁止TCP的Nagle算法(减少广域网上小分组数目的算法),默认关闭(即Nagle算法默认打开)。


3,IPv4套接字选项:

a,IP_HDRINCL

b,IP_OPTIONS

    设置IPv4首部中的IP选项

c,IP_RECVDSTADDR

    使所收到的UDP数据报的目的IP地址由recvmsg函数作为辅助数据返回。

d,IP_RECVIF

    使所收到的UDP数据报的接收接口索引由recvmsg函数作为辅助数据返回。

e,IP_TOS

    设置IP首部中的服务类似字段。

f,IP_TTL

    设置或获取系统用在从某个给定套接字发送的单播分组上的默认TTL。


4,IPv6套接字选项:

a,IPV6_CHECKSUM

    指定用户数据中检验和所处位置的偏移。

b,IPV6_DONTFRAG

    开启将禁止为UDP或原始套接字自动插入分片首部

c,IPV6_NEXTHOP

    这是一个特权操作,将外出数据报的下一跳地址指定为一个套接字地址结构。

d,IPV6_PATHMTU

    只提供获取操作,返回值为由路劲MTU发现功能确定的当前MTU。

e,IPV6_RECVDSTOPTS

    开启本选项(默认关闭),任何接收到的IPv6目的地址都将由recvmsg作为辅助数据返回。

f,IPV6_RECVHOPLIMIT

    开启本选项(默认关闭),任何接收到的跳限字段都将由recvmsg作为辅助数据返回。

g,IPV6_RECVHOPOPTS

    开启本选项(默认关闭),任何接收到的IPv6步跳选项都将由recvmsg作为辅助数据返回。

h,IPV6_RECVPATHMTU

    开启使某条路径的路径MTU在发生变化时将由recvmsg作为辅助数据返回。

i,IPV6_RECVPKTINFO

    开启使接收到的IPv6数据报的的目的IPv6地址和到达接口索引将由recvmsg作为辅助数据返回。

j,IPV6_RECVRTHDR

    开启本选项(默认关闭),任何接收到的IPv6路由首部都将由recvmsg作为辅助数据返回。

k,IPV6_RECVTCLASS

    开启本选项(默认关闭),接收到的流通类型(包含DSCP和ECN字段)将由recvmsg作为辅助数据返回。

l,IPV6_UNICAST_HOPS

    类似IPv4的IP_TTL,给相应的套接字上发出的外出数据报指定默认跳限,可获取。

m,IPV6_USE_MIN_MTU

    置1表明路径MTU发现功能不必执行,为避免分片,分组就使用IPv6的最小MTU。

    置0表示路径MTU发现功能对于所有目的地都得执行。

n,IPV6_V6ONLY

    在一个AF_INET6套接字上开启将限制它只执行IPv6通行,默认关闭。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值