您的位置:首页 > 其它

socket套接字选项

2016-09-30 11:45 1291 查看
本文写作背景基于对多网卡的配置,要求实现多个网卡同时上网,并且能指定

仅针对linux下的socket选项进行整理分析。

SOL_SOCKET  1

SO_DEBUG:启用套接字调试,只允许具备CAP_NET_ADMIN权限或有效进程ID为0的进程使用
SO_REUSEADDR:
<1>允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。
<2>允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。
<3>允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。
<4>允许完全重复的捆绑,一般来说,这个特性仅支持多播的系统,而且只对UDP套接口。
SO_TYPE:获取套接字类型(诸如SOCK_STREAM)
SO_ERROR:获取并清除未决的套接字错误。只读选项,返回一个整数值。
SO_DONTROUTE:不通过网关转发,直接发送给直接连接的主机。
SO_BROADCAST    6

SO_SNDBUF   7
SO_RCVBUF   8
SO_SNDBUFFORCE  32
SO_RCVBUFFORCE  33
设置接收和发送区缓存大小,文件位于/proc/sys/net/core/目录下的wmem_default,wmem_max,rmem_default,rmem_max。*FORCE的区别在于可以修改最大值的限制。

SO_KEEPALIVE:在面向连接的套接字上启用keep-alive消息发送
SO_OOBINLINE:如果启用此选项,带外数据直接放置在数据流中;否则,带外数据只能以MSG_OOB调用recv传递
SO_NO_CHECK 11
SO_PRIORITY 12
SO_LINGER:如果启用,close或shutdown调用将阻塞直到所有排队的消息被成功发送或者超时。
SO_BSDCOMPAT    14
SO_REUSEPORT    15

SO_PASSCRED 16
SO_PEERCRED 17

SO_RCVLOWAT
SO_SNDLOWAT
指定套接层传递数据到协议(SO_SNDLOWAT)或用户接收(SO_RCVLOWAT)时,缓冲区至少应该有多少字节数。两个值都初始化为1。SO_SNDLOWAT在Linux下是不可修改的。SO_RCVLOWAT从Linux 2.4开始可以修改。现行的select和poll系统调用并不理会Linux上的SO_RCVLOWAT设置,哪怕只有1字节可用也会标记套接字可读,接着的读取会被阻塞,直到SO_RCVLOWAT字节数可用。

SO_RCVTIMEO
SO_SNDTIMEO
指定接收或发送报告错误之前的超时值。参数是一个timeval结构。如果一个输入或输出函数在这段时间内阻塞,数据也已经被发送或接收,则其返回值将是传输的数据量;如果没有传输任何数据而超时,则其返回-1并设置EAGAIN或EWOULDBLOCK,就好像套接字是非阻塞的一样。如果超时值设置为0,则操作将一直阻塞。超时只是针对执行套接字I/O的系统调用如read,recvmsg,send,sendmsg有效,对select,poll,epoll_wait等则无效。

SO_SECURITY_AUTHENTICATION      22
SO_SECURITY_ENCRYPTION_TRANSPORT    23
SO_SECURITY_ENCRYPTION_NETWORK      24

SO_BINDTODEVICE:
将套接字绑定到一个特定设备,通过接口名称诸如“eth0”指定。如果名称是一个空字符串或长度为0,则移除设备。传递的选项是一个可变长度的,空字符结尾的本地接口名称字符串,最大长度是IFNAMSIZ。如果一个套接字绑定到一个接口,则它只能处理特定接口上接收的包。注意,只能在几种套接字类型上工作,特定于AF_INET。

SO_ATTACH_FILTER    26
SO_DETACH_FILTER    27
SO_GET_FILTER       SO_ATTACH_FILTER

SO_PEERNAME     28
SO_TIMESTAMP        29
SCM_TIMESTAMP       SO_TIMESTAMP

SO_ACCEPTCONN:只能用于getsockopt。0代表套接字不是监听套接字,1则代表是。

SO_PEERSEC      31
SO_PASSSEC      34
SO_TIMESTAMPNS      35
SCM_TIMESTAMPNS     SO_TIMESTAMPNS

SO_MARK         36

SO_TIMESTAMPING     37
SCM_TIMESTAMPING    SO_TIMESTAMPING

SO_PROTOCOL     38
SO_DOMAIN       39

SO_RXQ_OVFL             40

SO_WIFI_STATUS      41
SCM_WIFI_STATUS SO_WIFI_STATUS
SO_PEEK_OFF     42

SO_NOFCS

SO_LOCK_FILTER

SO_SELECT_ERR_QUEUE

SO_BUSY_POLL

SO_MAX_PACING_RATE

SO_BPF_EXTENSIONS

SO_INCOMING_CPU
SO_ATTACH_BPF
SO_DETACH_BPF       SO_DETACH_FILTER
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: