getsockopt和setsockopt函数
在Unix网络编程中通常用到getsockopt和setsockopt两个函数来获取和设置套接口的选项。
getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。
#include <sys/socket.h>
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
/**sockfd: 一个标识套接口的描述字*level:选项定义的层次。例如,支持的层次有SOL_SOCKET、IPPROTO_TCP等。*optname:需获取的套接口选项。*optval:指针,指向存放所获得选项值的缓冲区。*optlen:指针,指向optval缓冲区的长度值。
*/
setsockopt()函数用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的"套接口"层次上的选项。
#include <sys/socket.h>
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
/*
* sockfd: 标识一个套接口的描述字。
* level: 选项定义的层次:支持SOL_SOCKET、IPPROTO_TCP、IPPROTO_IP和IPPROTO_IPV6等。
* optname: 需设置的选项。
* optval: 指针,指向存放选项值的缓冲区。
* optlen: optval缓冲区长度。
*/
以上两个函数仅用于套接口,sockfd必须指向一个打开的套接口,level指定系统中解释选项的代码,普通套接口代码或特定于协议的代码(例如: IPv4、IPv6或TCP)。
optval是一个指向变量的指针,通过它,或由setsockopt取得选项的新值,或由getsockopt存储选项的当前值。此变量的大小由最后一个参数指定,对于setsockopt,它是一个值,对getsockopt来说,它是一个出参。
下表总结了由getsockopt获取或由setsockopt设置的一些选项,"数据类型"列给出了指针optval必须指向的每个选项的数据类型。其中,用花括号的标记来表示一个结构,如linger{}表示结构linger。
level级别:SOL_SOCKET
optname(选项名) | 选项值数据类型 | 访问 | 说明 |
SO_ACCEPTCONN | bool | get | 如为TRUE(真),表明套接字处于监听模式 |
SO_BROADCAST | bool | get/set | 如TRUE,表明套接字已配置成对广播消息进行发送 |
SO_CONNECT_TIME | int | get | 返回套接字建立连接的时间,以秒为单位,如尚未连接,返回0xffffffff |
SO_DEBUG | bool | get/set | 如果TRUE,就允许调试输出(W32不支持) |
SO_DONTLINGER | bool | get/set | 如果是TRUE,则禁用SO_LINGER |
SO_LINGER | struct linger | get/set | 设置或获取当前的拖延值 |
SO_DONTROUTE | bool | get/set | 如果TRUE,便直接向网络接口发送消息,无需查询路由表 |
SO_ERROR | bool | get | 返回错误状态 |
SO_EXCLUSIVEADDRUSE | bool | get/set | 如果TRUE,套接字绑定那个本地端口就不能重新被另一个进程使用 |
SO_KEEPALIVE | bool | get/set | 如果TRUE,套接字就会进行配置,在会话过程中发送“保持活动”消息 |
SO_MAX_MSG_SIZE | unsigned int | get | 对一个面向消息的套接字来说,一条消息的最大长度 |
SO_OOBINLINE | bool | get/set | 如果是TRUE,带外数据就会在普通数据流中返回(W32不支持) |
SO_PROTOCOL_INFO | WSAPROTOCOL_INFO | get | 套接字绑定的那种协议的特征 |
SO_RCVBUF | int | get/set | 面向接收操作,为每个套接字分别获取或设置缓冲区长度 |
SO_REUSEADDR | bool | get/set | 如果是TRUE,套接字就可与一个正由其他套接字使用的地址绑定到一起,或与处在TIME_WAIT状态的地址绑定到一起 |
SO_SNDBUF | bool | get/set | 返回指定套接字的类型(如SOCK_DGRAM和SOCK_STREAM等等) |
SO_SNDTIMEO | int | get/set | 获取或设置套接字上的数据发送超时事件(以毫秒为单位) |
SO_RCVTIMEO | int | get/set | 获取或设置与套接字上数据接收对应的超时时间值(以毫秒为单位) |
SO_RCVTIMEO | int | get/set | 获取或设置与套接字上数据接收对应的超时时间值(以毫秒为单位) |
SO_UPDATE_ACCEPT_CONTEXT | SOCKET | get/set | 更新SOCKET状态 |
level级别:IPPROTO_IP
optname(选项名) | 选项值数据类型 | 访问 | 说明 |
IP_OPTIONS | char[] | get/set | 设置或获取IP头内的IP选项 |
IP_HDRINCL | bool | get/set | 如果是TRUE,IP头就会随即将发送的数据一起提交,并从读取的数据中返回 |
IP_TOS | int | get/set | IP服务类型 |
IP_TTL | int | get/set | IP协议的"存在时间"(TTL) |
IP_MULTICAST_IF | unsigned long | get/set | 获取或设置打算从它上面发出多播数据的本地接口 |
IP_MULTICAST_TTL | int | get/set | 为套接字获取或设置多播数据包的存在时间 |
IP_MULTICAST_LOOP | bool | get/set | 如果TRUE,发至多播地址的数据将原封不动地"反射"或"反弹"回套接字的进入缓冲区 |
IP_ADD_MEMBERSHIP | struct ip_mreq | set | 在指定的IP组内为套接字赋予成员资格 |
IP_DROP_MEMBERSHIP | struct ip_mreq | set | 将套接字从指定的IP组内删去(撤销成员资格) |
IP_DONTFRAGMENT | bool | get/set | 如果是TRUE,就不对IP数据进行分段 |
level级别:IPPROTO_TCP
optname(选项名) | 选项值数据类型 | 访问 | 说明 |
TCP_NODELAY | bool | get/set | 若为TRUE,就会在套接字上禁用Nagle算法(只适用于流式套接字) |
getsockopt和setsockopt函数相关推荐
- 网络编程学习笔记(getsockopt和setsockopt函数)
其原型为: #include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, ...
- C语言socket getsockopt() setsockopt()函数(获取和设置套接口的选项?)
文章目录 man 文档(越看越懵逼啊!) 解释 getsockopt()函数用于获取任意类型.任意状态套接口的选项当前值,并把结果存入optval. setsockopt()函数用于任意类型.任意状态 ...
- TCP/IP编程之getsockopt/setsockopt函数详解
前述: 有很多方法来获取和设置影响套接字的选项: · getsockopt和setsockopt函数 · fcntl函数,是把套接字设置为非阻塞式I/O型或者信号驱动式I/O型以及设置套接字属主的PO ...
- C语言socket getsockopt() setsockopt()函数(获取和设置套接口的选项?)(套接字级别SOL_SOCKET)
文章目录 man 文档(越看越懵逼啊!) 解释 getsockopt()函数用于获取任意类型.任意状态套接口的选项当前值,并把结果存入optval. setsockopt()函数用于任意类型.任意状态 ...
- setsockopt()函数和getsockopt()函数
setsockopt()函数功能介绍 int setsockopt(int sock, int level, int optname, const void *optval, socklen_t op ...
- linux网络编程之setsockopt()函数来设置socket状态以及getsockopt函数只用总结
1.setsockopt函数 头文件:#include <sys/types.h> #include <sys/socket.h>定义函数:int setsockopt(int ...
- setsockopt()函数功能介绍
setsockopt()函数功能介绍 功能描述:获取或者设置与某个套接字关联的选项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层. 用法: #include <sys/types.h ...
- setsockopt()函数使用详解
博客原创链接:http://blog.csdn.net/tody_guo/article/details/5972588 1. closesocket(一般不会立即关闭而经历TIME_WAIT的过程) ...
- 【man】getsockopt 和 setsockopt
NAME (名称) getsockopt, setsockopt - get and set options on sockets getsockopt, setsockopt - 获取和设置套接字的 ...
最新文章
- 机器学习编程语言_我应该选择哪种编程语言? 我应该专注于前端吗? 后端? 机器学习?...
- Hi3516A开发--编译内核、uboot
- GridView 激发了未处理的事件“RowEditing”
- 数据可视化demo_为更快读懂报表,我们将数据可视化了
- caj格式转pdf的3种方法
- Kubernetes v1.19 正式发布!更新 33 项功能
- python大神读取_大神教你python 读取文件并把矩阵转成numpy的两种方法
- UML类图(类关系的表示)
- python类与方法与函数_Python 中的函数与类的方法
- SHIFT-JIS编码范围
- 在IDEA中使用Linux命令
- Win7停服,引发国产操作系统“蝴蝶效应”
- 【科研】科研绘图作图画图
- Linux中的子shell是什么,怎么理解?
- WPS关闭不了后台一直运行的解决办法(wpscloudsvr.exe)
- ssh服务器配置以及密匙登录
- 仿真器VCS solver 对包含 function 约束的求解
- MySQL必知必会——第十五章联结表
- linux 无权限挂载 iso,linux无需root挂载iso镜像文件
- 2013年计算机模拟考2套题操作题,2013年考研模拟题二:计算机
热门文章
- cxf环境搭建与第一个项目
- KMP算法 hdu 1711 hdu 2203
- poj 2342 树形DP
- 通俗易懂,CQRS概念浅析
- Leecode大厂热题100道系列题解
- 【三万字!】Dubbo、Zookeeper学习笔记!秒杀面试官!——双非上岸阿里巴巴系列
- 【最详细】【传智播客】JavaWeb程序设计任务教程 第5、6章练习答案
- PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))
- pythondistutils安装_安装msi后的python distutils
- 华硕计算机用户名默认,华硕路由器后台默认网址是多少