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 |
设置分配给套接字的数据发送缓冲区的大小 |
|||||||||||||
|
SO_TYPE |
int |
get |
返回指定套接字的类型(如SOCK_DGRAM和SOCK_STREAM等等) |
|||||||||||||
|
SO_SNDTIMEO |
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函数的更多相关文章
- LINUX下getsockopt和setsockopt函数
这两个函数仅用于套接字. 函数原型: #include <sys/socket.h> #include <sys/types.h> int getsockopt(int soc ...
- Linux下getsockopt/setsockopt 函数说明
[ getsockopt/setsockopt系统调用 功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和 ...
- linux下getsockopt和setsockopt具体解释及測试
linux下getsockopt和setsockopt具体解释及測试 NAME 名字 getsockopt, setsockopt - get and set options on sockets 获 ...
- linux下getsockopt和setsockopt详解及测试
linux下getsockopt和setsockopt详解及测试 NAME 名字 getsockopt, setsockopt - get and set options on sockets 获取或 ...
- setsockopt函数功能及参数详解
Socket描述符选项[SOL_SOCKET] #include <sys/socket.h> int setsockopt( int socket, int level, int opt ...
- setsockopt函数
#include <sys/socket.h> int setsockopt( int socket, int level, int option_name, ...
- getsockopt/setsockopt 函数说明
[ getsockopt/setsockopt系统调用] 功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选 ...
- 套接字选项——getsockopt和setsockopt
这两个函数仅用于套接字 #include <sys/socket.h> int getsockopt(int sock, int level, int optname, void *opt ...
- setsockopt()函数功能介绍
功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时, 选项位于的层和选项的名称必须给出.为了操作套接字层的选项,应该 将层的 ...
随机推荐
- C++中数组作为形参进行传递(转)
有两种传递方法,一种是function(int a[]); 另一种是function(int *a) 这两种两种方法在函数中对数组参数的修改都会影响到实参本身的值! 对于第一种,根据之前所学,形参是实 ...
- 机器学习爱好者 -- 翻译吴恩达老师的机器学习课程字幕 http://www.ai-start.com/
机器学习爱好者 -- 翻译吴恩达老师的机器学习课程字幕 GNU Octave 开源 MatLab http://www.ai-start.com/ https://zhuanlan.zhihu ...
- Lua中的userdata
[话从这里说起] 在我发表<Lua中的类型与值>这篇文章时,就有读者给我留言了,说:你应该好好总结一下Lua中的function和userdata类型.现在是时候总结了.对于functio ...
- 史上最明白的 NULL、0、nullptr 区别分析(老师讲N篇都没讲明白的东东),今天终于明白了,如果和我一样以前不明白的可以好好的看看...
C的NULL 在C语言中,我们使用NULL表示空指针,也就是我们可以写如下代码: int *i = NULL; foo_t *f = NULL; 实际上在C语言中,NULL通常被定义为如下: #def ...
- ASP.NET Core之中间件
本文翻译自:http://www.tutorialsteacher.com/core/aspnet-core-middleware 基本概念 ASP.NET Core引入了中间件的概念,中间件是在AS ...
- 【原创】大叔经验分享(17)编程实践对比Java vs Scala
scala 官方地址 https://www.scala-lang.org/ 本文尽可能包含了一些主要的java和scala在编程实践时的显著差异,展现scala的代码的简洁优雅:scala通吃< ...
- Python-Django 模板层
1 模版简介 DTL:django模板语言 核心: 变量 {{ }} 标签 {% %} 2 模版语法之变量 -变量渲染:{{变量}} -变量深度查询:{{变量.索引/key值/方法}} <h2& ...
- 团队项目——NABCD
团队名称:天码行空 团队项目名称:天码记账 团队口号:彰明往事,考察未来 发布后一周内用户量:1千 N(Need)需求 这个软件主要解决了大学生管理自己财务状况的问题,随着手机支付的日趋流行大家对财务 ...
- ios中safari无痕浏览模式下,localStorage的支持情况
前言 前阶段,测试提了个bug,在苹果手机中无痕模式下,搜索按钮不好使,无法跳页,同时搜索历史也没有展示(用户搜索历史时使用localStorage存储). 正文 iOS上Sarfari在无痕模式下, ...
- 阿里云学生服务器搭建网站-Ubuntu16.04安装php开发环境
阿里云学生服务器搭建网站(2)-Ubuntu16.04安装php开发环境 优秀博文:https://www.linuxidc.com/Linux/2016-10/136327.htm https:/ ...