在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函数的更多相关文章

  1. LINUX下getsockopt和setsockopt函数

    这两个函数仅用于套接字. 函数原型: #include <sys/socket.h> #include <sys/types.h> int getsockopt(int soc ...

  2. Linux下getsockopt/setsockopt 函数说明

    [ getsockopt/setsockopt系统调用 功能描述:  获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和 ...

  3. linux下getsockopt和setsockopt具体解释及測试

    linux下getsockopt和setsockopt具体解释及測试 NAME 名字 getsockopt, setsockopt - get and set options on sockets 获 ...

  4. linux下getsockopt和setsockopt详解及测试

    linux下getsockopt和setsockopt详解及测试 NAME 名字 getsockopt, setsockopt - get and set options on sockets 获取或 ...

  5. setsockopt函数功能及参数详解

    Socket描述符选项[SOL_SOCKET] #include <sys/socket.h> int setsockopt( int socket, int level, int opt ...

  6. setsockopt函数

    #include <sys/socket.h>     int setsockopt( int socket, int level, int option_name,            ...

  7. getsockopt/setsockopt 函数说明

    [ getsockopt/setsockopt系统调用]       功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选 ...

  8. 套接字选项——getsockopt和setsockopt

    这两个函数仅用于套接字 #include <sys/socket.h> int getsockopt(int sock, int level, int optname, void *opt ...

  9. setsockopt()函数功能介绍

    功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时, 选项位于的层和选项的名称必须给出.为了操作套接字层的选项,应该 将层的 ...

随机推荐

  1. axd文件

    ashx与axd作用相同,ashx一般在本项目内,axd在其它dll中.axd扩展名的必须要在web.config中的<httpHandlers>中进行注册,而ashx直接在项目中当成as ...

  2. 2.6 if嵌套

    if嵌套 通过学习if的基本用法,已经知道了 当需要满足条件去做事情的这种情况需要使用if 当满足条件时做事情A,不满足条件做事情B的这种情况使用if-else 想一想: 坐火车或者地铁的实际情况是: ...

  3. Python3:判断三角形的类型

    # 判断三角形类型def triangle(a,b,c): if a>0 and b>0 and c>0: if a+b>c and b+c>a and a+c>b ...

  4. C# - 操作符

    操作符(Operator) C#的操作符是一种告诉编译器执行计算.逻辑判断的符号. default(x) 获取类型的默认值,x是类型.虽然可以为任意类型使用此操作符,但此操作符主要用于泛型,在不确定泛 ...

  5. 创建一个MongoDB数据库再到配置成Window服务再设置用户名密码

    1.安装MongoDB数据在官网下载安装 然后在C盘找到C:\Program Files\MongoDB\Server\4.0\bin这个可执行目录 使用cmd进入到这: 2.在C盘根目录创建一个名为 ...

  6. Django-1-URL路由系统

    一.分发地址 在APP中创建urls.py文件,将属于该APP的url地址都写入到这个文件中,当程序收到用户发送的请求时,先在根目录的urls.py文件中查找该地址属于哪个APP,将这个请求分发到该A ...

  7. WebService - [Debug] undefined element declaration 's:schema'

    错误: [ERROR] undefined element declaration 's:schema' line 44 of http://www.webxml.com.cn/WebServices ...

  8. 将.NET Core部署在Docker

    转载自:ASP.NET Core 2.1 使用Docker运行 1.新建ASP.NET Core项目 新建一个名为“DockerSample”的ASP.NET Core项目 运行程序,页面如下: 2. ...

  9. 【原创】大数据基础之Hadoop(3)yarn数据收集与监控

    yarn常用rest api 1 metrics # curl http://localhost:8088/ws/v1/cluster/metrics The cluster metrics reso ...

  10. JavaScript入门学习笔记(表单验证)

    表单验证: 在数据被送到服务器之前对HTML表单中的输入数据进行验证,避免服务器频繁验证信息造成用户体验差. (1)表单数据是否为空 (2)输入的信息格式是否正确 (3)输入数据的类型是否正确 必填( ...