函数原型(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通行,默认关闭。