转载from:https://blog.csdn.net/hyj920/article/details/101305466
函数功能:setsockopt()函数,用于任意类型、任意状态套接口的设置。
头文件:#include <sys/socket.h>
函数原型:int setsockopt ( int SOCKETs, /* 套接字 */
int level , /* 选项级别 */
int optname , /* 选项级别 */
const char * optval , /* 目标选项的值 */
int optlen ); /* 目标选项的值 */
参数说明:
第一个参数sockfd是套接字描述符。
第二个参数level是被设置的选项的级别。
level指定控制套接字的层次.可以取三种值:
1) SOL_SOCKET:通用套接字选项.
2) IPPROTO_IP:IP选项.
3) IPPROTO_TCP:TCP选项.
如果想要在套接字级别上设置选项,就必须把level设置为 SOL_SOCKET。
第三个参数optname指定准备设置的选项。
optname可以有哪些取值,这取决于level
第四个参数optval是指针,指向存放选项值的缓冲区
第五个参数optlen指定存放选项值的缓冲区的长度
选项名称 |
说明 |
数据类型 |
SOL_SOCKET |
||
SO_BROADCAST |
允许发送广播数据 |
int |
SO_DEBUG |
允许调试 |
int |
SO_DONTROUTE |
不查找路由 |
int |
SO_ERROR |
获得套接字错误 |
int |
SO_KEEPALIVE |
保持连接 |
int |
SO_LINGER |
延迟关闭连接 |
struct linger |
SO_OOBINLINE |
带外数据放入正常数据流 |
int |
SO_RCVBUF |
接收缓冲区大小 |
int |
SO_SNDBUF |
发送缓冲区大小 |
int |
SO_RCVLOWAT |
接收缓冲区下限 |
int |
SO_SNDLOWAT |
发送缓冲区下限 |
int |
SO_RCVTIMEO |
接收超时 |
struct timeval |
SO_SNDTIMEO |
发送超时 |
struct timeval |
SO_REUSERADDR |
允许重用本地地址和端口 |
int |
SO_TYPE |
获得套接字类型 |
int |
SO_BSDCOMPAT |
与BSD系统兼容 |
int |
IPPROTO_IP |
||
在数据包中包含IP首部 |
int |
|
IP_OPTINOS |
IP首部选项 |
int |
IP_TOS |
服务类型 |
|
IP_MULTICAST_IF |
获取或设置打算从它上面发出多播数据的本地接口 |
无符号长整数 |
IP_MULTICAST_TTL |
为套接字获取或设置多播数据包的存在时间 |
|
IP_TTL |
生存时间 |
int |
IPPRO_TCP |
||
TCP最大数据段的大小 |
int |
|
TCP_NODELAY |
不使用Nagle算法 |
int |