一、基本概念
设置套接字的选项对套接字进行控制
除了设置选项外,还可以获取选项
选项的概念相当于属性,所以套接字选项也可说是套接字属性
有些选项(属性)只可获取,不可设置;
有些选项既可设置也可获取
1.选项级别
SOL_SOCKET 该级别的选项只作用于套接字本身
SOL_LRLMP 该级别的选项作用于IrDA协议
IPPROTO_IP 该级别的选项作用于IPv4协议
IPPROTO_IPV6 该级别的选项作用于IPv6协议
IPPROTO_RM 该级别的选项作用于可靠的多播传输
IPPROTO_TCP 该级别的选项适用于流式套接字
IPPROTO_UDP 该级别的选项适用于数据报套接字
2.SOC_SOCKET的常用选项
选项名称 | 说明 | 获取/设置 |
SO_ACCEPTCONN | 套接字是否处于监听状态 | 获取 |
SO_BROADCAST | 允许发送广播数据 | 两者都可 |
SO_DEBUG | 允许调试 | 两者都可 |
SO_DONTROUTE | 不查找路由 | 两者都可 |
SO_ERROR | 获得套接字错误 | 获取 |
SO_KEEPALIVE | 保活连接 | 两者都可 |
SO_LINGER | 延迟关闭连接 | 两者都可 |
SO_OOBINLINE | 带外数据放入正常数据流 | 两者都可 |
SO_RCVBUF | 接收缓冲区大小 | 两者都可 |
SO_SNDBUF | 发送缓冲区大小 | 两者都可 |
SO_REUSERADDR | 允许重用本地地址和端口 | 两者都可 |
SO_TYPE | 获得套接字类型 | 获取 |
IP_ADD_MEMBERSHIP | 加入一个多播组 | 设置 |
IP_OPTIONS | 获取或设置IP头部内的选项 | 两者都可 |
IP_HDRINCL | 用户在用户数据前面提供 IP 标头(用于原始套接字) | 两者都可 |
IP_TTL | IP TTL相关 | 两者都可 |
二、getsockopt获取套接字选项
#include <sys/types.h>/* See NOTES */
#include <sys/socket.h>
int setsockopt(int sockfd,int level,int optname,
const void *optval, socklen_t optlen);
/*
sockfd:套接字描述符
level:表示选项的级别
optname:表示要设置的选项名称
optval:指向存放接收到的选项内容的缓冲区
optlen:指向optval所指缓冲区的大小
函数返回值:执行成功返回0,否则返回‒1,errno来获取错误码*/
三、setsockopt设置套接字选项
#include <sys/types.h>/* See NOTES */
#include <sys/socket.h>
int setsockopt(int sockfd,int level,int optname,
const void *optval, socklen_t optlen);
/*
sockfd:套接字描述符
level:表示选项的级别
optname:表示要设置的选项名称
optval:指向存放接收到的选项内容的缓冲区
optlen:指向optval所指缓冲区的大小
函数返回值:执行成功返回0,否则返回‒1,errno来获取错误码*/