在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函数相关推荐

  1. 网络编程学习笔记(getsockopt和setsockopt函数)

    其原型为: #include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, ...

  2. C语言socket getsockopt() setsockopt()函数(获取和设置套接口的选项?)

    文章目录 man 文档(越看越懵逼啊!) 解释 getsockopt()函数用于获取任意类型.任意状态套接口的选项当前值,并把结果存入optval. setsockopt()函数用于任意类型.任意状态 ...

  3. TCP/IP编程之getsockopt/setsockopt函数详解

    前述: 有很多方法来获取和设置影响套接字的选项: · getsockopt和setsockopt函数 · fcntl函数,是把套接字设置为非阻塞式I/O型或者信号驱动式I/O型以及设置套接字属主的PO ...

  4. C语言socket getsockopt() setsockopt()函数(获取和设置套接口的选项?)(套接字级别SOL_SOCKET)

    文章目录 man 文档(越看越懵逼啊!) 解释 getsockopt()函数用于获取任意类型.任意状态套接口的选项当前值,并把结果存入optval. setsockopt()函数用于任意类型.任意状态 ...

  5. setsockopt()函数和getsockopt()函数

    setsockopt()函数功能介绍 int setsockopt(int sock, int level, int optname, const void *optval, socklen_t op ...

  6. linux网络编程之setsockopt()函数来设置socket状态以及getsockopt函数只用总结

    1.setsockopt函数 头文件:#include <sys/types.h> #include <sys/socket.h>定义函数:int setsockopt(int ...

  7. setsockopt()函数功能介绍

    setsockopt()函数功能介绍 功能描述:获取或者设置与某个套接字关联的选项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层. 用法: #include <sys/types.h ...

  8. setsockopt()函数使用详解

    博客原创链接:http://blog.csdn.net/tody_guo/article/details/5972588 1. closesocket(一般不会立即关闭而经历TIME_WAIT的过程) ...

  9. 【man】getsockopt 和 setsockopt

    NAME (名称) getsockopt, setsockopt - get and set options on sockets getsockopt, setsockopt - 获取和设置套接字的 ...

最新文章

  1. 机器学习编程语言_我应该选择哪种编程语言? 我应该专注于前端吗? 后端? 机器学习?...
  2. Hi3516A开发--编译内核、uboot
  3. GridView 激发了未处理的事件“RowEditing”
  4. 数据可视化demo_为更快读懂报表,我们将数据可视化了
  5. caj格式转pdf的3种方法
  6. Kubernetes v1.19 正式发布!更新 33 项功能
  7. python大神读取_大神教你python 读取文件并把矩阵转成numpy的两种方法
  8. UML类图(类关系的表示)
  9. python类与方法与函数_Python 中的函数与类的方法
  10. SHIFT-JIS编码范围
  11. 在IDEA中使用Linux命令
  12. Win7停服,引发国产操作系统“蝴蝶效应”
  13. 【科研】科研绘图作图画图
  14. Linux中的子shell是什么,怎么理解?
  15. WPS关闭不了后台一直运行的解决办法(wpscloudsvr.exe)
  16. ssh服务器配置以及密匙登录
  17. 仿真器VCS solver 对包含 function 约束的求解
  18. MySQL必知必会——第十五章联结表
  19. linux 无权限挂载 iso,linux无需root挂载iso镜像文件
  20. 2013年计算机模拟考2套题操作题,2013年考研模拟题二:计算机

热门文章

  1. cxf环境搭建与第一个项目
  2. KMP算法 hdu 1711 hdu 2203
  3. poj 2342 树形DP
  4. 通俗易懂,CQRS概念浅析
  5. Leecode大厂热题100道系列题解
  6. 【三万字!】Dubbo、Zookeeper学习笔记!秒杀面试官!——双非上岸阿里巴巴系列
  7. 【最详细】【传智播客】JavaWeb程序设计任务教程 第5、6章练习答案
  8. PTA 栈 (20分)(全网首发)(实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1))
  9. pythondistutils安装_安装msi后的python distutils
  10. 华硕计算机用户名默认,华硕路由器后台默认网址是多少