转载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 |