一、sock可选项
协议层 | 选项名 | 读取 | 设置 | 作用 |
SOL_SOCKET | SO_SENDBUF | O | O | 设置输出缓冲的大小 |
SO_RCVBUF | O | O | 设置输入缓冲去大小 | |
SO_REUSEADDR | O | O | 端口释放后立即重用 | |
SO_KEEPALIVE | O | O | 开启心跳检测 | |
SO_BROADCAST | O | O | 开启广播功能 | |
SO_DONTROURT | O | O | 发送给直连网络,和选用的协议有关 | |
SO_OOBINLINE | O | O | 直接发送单字节数据 | |
SO_ERROR | O | X | 调试和异常信息 | |
SO_TYPR | O | X | 套接字类型 |
协议层 | 选项名 | 读取 | 设置 | 作用 |
IPPROTO_IP | IP_TOS | O | O | 修改IP包的TOS字段. |
IP_TTL | O | O | 设置主机发送数据包的生存时间 | |
IP_MULTICAST_TTL | O | O | 设置多播组数据的TTL值 | |
IP_MULTICAST_LOOP | O | O | 设置多播是否回送 | |
IP_MULTICAST_IF | O | O | 设置默认接口 | |
IP_ADD_MEMBERSHIP | 在指定接口上加入组播组 | |||
IP_MULTICAST_TTL | 设置多播组数据的TTL值 | |||
IP_DROP_MEMBERSHIP | 退出组播组 | |||
IP_MULTICAST_IF | 获取默认接口或设置接口 | |||
IP_MULTICAST_LOOP | 禁止组播数据回送 |
协议层 | 选项名 | 读取 | 设置 | 作用 |
IPPROTO_IP | TCP_KEEPALIVE | O | O | 设置主动探测socket是否可用的方式 |
TCP_NODELAY | O | O | 设置Nagle算法 | |
TCP_MAXSEG | O | O | 设置发送给对端的最大数据量 |
二、setsockopt
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
- 我们通过socket()函数创建一个socket文件描述符直接使用,其实这只是系统为我们提供的一个默认的socket描述符,我们可以根据自己的工程的需求来对socket进行相应的配置,以提高程序的效率
- 参数1:sock描述符
- 参数2:协议层(要设置的可选项的协议层)
- 参数3:相对于参数2的可选项名字
- 参数4:要设置的可选项值的缓冲地址
- 参数5:保存要设置的可选项值的字节数
返回值
- 成功后,返回0。出错时返回-1,并正确设置errno
- 例如:我们设置一个sock用来当做广播通信,就可以使用以下方法
int yes = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(yes));
二、getsockopt
int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);
- 参数1:sock描述符
- 参数2:协议层(要查看的可选项的协议层)
- 参数3:相对于参数2的可选项名字
- 参数4:要设置的可选项值的缓冲地址
- 参数5:保存返回的可选项值的字节数
返回值
- 成功后,返回0。出错时返回-1,并正确设置errno