概述
什么是选项的级别:
socket中可以设置的属性种类很多,比如socke的选项、传输层TCP/UDP的选项、数据链路层的选项。这些选项在不同的层级,这就是选项的级别。常用级别及含义如下:
级别 | 含义 |
SOL_SOCKET | 作用于套接字本身 |
IPPROTO_IP | 作用于IPv4协议 |
IPPROTO_TCP | 作用于流式套接字 |
IPPROTO_UDP | 作用于数据报套接字 |
SOL_SOCKET级别的常用选项:
IPPROTO_IP级别的常用选项:
相关函数
//获取套接字选项
int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);
//设置套接字选项
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
返回值:成功返回0,失败返回-1
sockfd:套接字的文件描述符
level:选项的级别
optname:要获取/设置哪一个选项
optval:获取/设置的选项存放在哪
optlen:选项存放的空间的大小
相关实验
1、保活连接实验
什么是保活链接:
保活链接指的是在TCP通信中,为了防止长时间不交互而连接被关闭的情况,服务器会向客户端发送一些数据,以确保连接正常。当到达设置的间隔时,会发出第一个保活数据,如果服务器没有收到客户端的回应,之后会继续发出。当到达设置的发送次数依旧没有得到回应,那么服务器就会中断与客户端的连接。
保活连接包括:是否开启、未通讯多久发送第一次保活数据、之后发送的间隔、发送几次未响应中断连接。与之相对应的选项如下:
含义 | 选项级别 | 选项 | 设置值 |
是否开启保活连接 | SOL_SOCKET | SO_KEEPALIVE | 1开启0关闭 |
未通讯多久发送第一次保活数据 | SOL_TCP | TCP_KEEPIDLE | 单位s 默认7200s(2h) |
之后发送的间隔 | SOL_TCP | TCP_KEEPINTVL | 单位s 默认75s |
发送几次未响应中断连接 |