socket套接字选项getsockopt&setsockopt

简介: setsockopt()函数用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。在Unix网络编程中通常用到getsockopt和setsockopt两个函数来获取和设置套接口的选项。getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。

socket套接字选项getsockopt&setsockopt

在Unix网络编程中通常用到getsockopt和setsockopt两个函数来获取和设置套接口的选项。

getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。

setsockopt()函数用于任意类型、任意状态套接口的设置选项值。尽管在不同协议层上存在选项,但本函数仅定义了最高的“套接口”层次上的选项。

#include <sys/socket.h>
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
/*
sockfd:一个标识套接口的描述字。
level:选项定义的层次。例如,支持的层次有SOL_SOCKET、IPPROTO_TCP等。
optname:需获取的套接口选项。
optval:指针,指向存放所获得选项值的缓冲区。
optlen:指针,指向optval缓冲区的长度值。
*/
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算法 (只适用于流式套接字)
目录
相关文章
|
1月前
|
监控 安全 Unix
UNIX域套接字(Unix Domain Socket)在安全性和隐私性
UNIX域套接字(Unix Domain Socket)在安全性和隐私性
50 2
|
1月前
|
网络协议 安全 Unix
UNIX域套接字(Unix Domain Socket,UDS)之所以高效
UNIX域套接字(Unix Domain Socket,UDS)之所以高效
47 3
|
1月前
套接字(socket)的端点表示
套接字(socket)的端点表示
22 8
|
2月前
|
网络协议 Java Unix
套接字(Socket)
套接字(Socket)
22 3
|
6月前
|
存储
14.10 Socket 套接字选择通信
对于网络通信中的服务端来说,显然不可能是一对一的,我们所希望的是服务端启用一份则可以选择性的与特定一个客户端通信,而当不需要与客户端通信时,则只需要将该套接字挂到链表中存储并等待后续操作,套接字服务端通过多线程实现存储套接字和选择通信,可以提高服务端的并发性能,使其能够同时处理多个客户端的请求。在实际应用场景中,这种技术被广泛应用于网络编程、互联网应用等领域。在服务端启动时,创建套接字并进行绑定,然后开启一个线程(称为主线程)用于监听客户端的连接请求。主线程在接收到新的连接请求后,会将对应的套接字加入一个数据结构(例如链表、队列、哈希表等)中进行存储。同时,主线程会将存储套接字的数据结构传递给
25 1
14.10 Socket 套接字选择通信
|
6月前
|
存储 网络协议 API
14.1 Socket 套接字编程入门
Winsock是Windows操作系统上的套接字API,用于在网络上进行数据通信。套接字通信是一种允许应用程序在计算机网络上进行实时数据交换的技术。通过使用Windows提供的API,应用程序可以创建一个套接字来进行数据通信。这个套接字可以绑定到一个端口,以允许其他应用程序连接它。另外,Winsock可以使用TCP/IP、UDP等协议来完成不同类型的数据传输任务。在网络应用程序开发中,套接字通信可以帮助应用程序开发者实现客户端/服务端模型,并实现数据的可靠传输。一般套接字通信需要经历,创建套接字(Socket),绑定(Bind),监听(Listen),接受(Accept),连接(Connect
36 0
14.1 Socket 套接字编程入门
|
6月前
|
存储 网络协议 Unix
网络基础:socket套接字
网络基础:socket套接字
59 0
|
1月前
|
Go
Golang中socket套接字
Golang中socket套接字
22 2
|
6月前
|
机器学习/深度学习 网络协议 算法
计算机网络 | socket IPC(本地套接字domain)
计算机网络 | socket IPC(本地套接字domain)
36 0
|
1月前
|
网络协议 Unix 程序员
套接字(socket)的抽象层
套接字(socket)的抽象层
32 7