linux套接字选项API

获取套接字的选项值(getsockopt)

【头文件】
#include <sys/types.h>
#include <sys/socket.h>
【函数原型】
int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);
【函数功能】
        用于获取一个套接字的选项
【参数含义】
        [sockfd]: 待获取的通信套接字
        [level]:协议层次,有如下选项:
                SOL_SOCKET 套接字层次
                IPPROTO_IP ip 层次
                IPPROTO_TCP TCP 层次
        [optname]: 选项名字,对于套接字层次有下面一些选项
                SO_BROADCAST 是否允许发送广播信息
                SO_REUSEADDR 是否允许重复使用本地地址 SO_SNDBUF 获取发送缓冲区长度
                SO_RCVBUF 获取接收缓冲区长度
                SO_RCVTIMEO 获取接收超时时间
                SO_SNDTIMEO 获取发送超时时间
        [optval]: 用来保存获取到的选项值
        [optlen]: 用来保存选项值得长度
【返回值】
        成功返回 0
        失败返回-1,同时 errno 被设置
【示例】
        获取发送缓冲区为多少 k 内存
int opt_val;
socklen_t opt_len = sizeof(opt_val);
if(getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &opt_val, &opt_len) < 0)
{perror("fail to getsockopt");
}
printf("send_buf = %dk\n", opt_val / 1024);

设置套接字的选项值(setsockopt)

【头文件】
#include <sys/types.h>
#include <sys/socket.h>
【函数原型】
int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
【函数功能】
        用于设置一个套接字的选项  
【参数含义】
        [sockfd]: 待设置的通信套接字
        [level]:协议层次,有如下选项:
                SOL_SOCKET 套接字层次
                IPPROTO_IP ip 层次
                IPPROTO_TCP TCP 层次
        [optname]: 选项名字,对于套接字层次有下面一些常用选项
                SO_BROADCAST 是否允许发送广播信息
                SO_REUSEADDR 是否允许重复使用本地地址
                SO_SNDBUF 获取发送缓冲区长度
                SO_RCVBUF 获取接收缓冲区长度
                SO_RCVTIMEO 获取接收超时时间
                SO_SNDTIMEO 获取发送超时时间
        对于 IP 层次有下面常用选项
                IP_ADD_MEMBERSHIP 获取/设置加入的多播组
        [optval]: 设置的选项值
         [optlen]: 设置的选项值得长度
【返回值】
        成功返回 0
        失败返回-1,同时 errno 被设置
【示例】
        设置当前的拖延值
struct linger
{u_short l_onoff;u_short l_linger;
};struct linger m_sLinger;
m_sLinger.l_onoff=1;//(在 closesocket()调用,但是还有数据没发送完毕的时候容许逗留)
// 如果 m_sLinger.l_onoff=0;则功能和 2.)作用相同;
m_sLinger.l_linger=5;//(容许逗留的时间为 5 秒)
setsockopt(s,SOL_SOCKET,SO_LINGER,(constchar*)&m_sLinger,sizeof(linger));

选项汇总

套接字层次

选项名
选项值
数据类
访问权限
说明
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
unsign
ed int
get
对一个面向消息的套接字来说,一条消息的最大长度
SO_OOBINLINE
bool
get/set
如果是 TRUE,带外数据就会在普通数据流中返回 (W32 不支持)
SO_PROTOCOL_INFO
WSAPRO
TOCOL_
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 状态

IP 层次

TCP 层次

IP_ADD_MEMBERSHIP ip_mreq get/set 获取/设置加入的多播组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P1025 [NOIP2001 提高组] 数的划分 题解

文章目录 题目描述输入格式输出格式样例样例输入样例输出 数据范围提示思路与部分实现完整代码 题目描述 将整数 n n n 分成 k k k 份&#xff0c;且每份不能为空&#xff0c;任意两个方案不相同&#xff08;不考虑顺序&#xff09;。 例如&#xff1a; n 7 n7 n7&#xf…

C++编译与运行:其一、静态类型和动态类型

一、什么是静态类型和动态类型&#xff1f; 先说结论&#xff1a;编译期间可以明确的类型是静态类型&#xff1b;运行期间才能明确的类型是动态类型。 后半句可能有点不好理解&#xff0c;通俗地说&#xff0c;需要通过执行代码才能明确的类型是动态类型。 假如我们有两个类&…

【前端】NodeJS核心知识点整理

1.Node.js入门案例 1.1.什么是Node.js JS是脚本语言&#xff0c;脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS&#xff0c;浏览器充当了解析器的角色。而对于需要独立运行的JS&#xff0c;NodeJS就是一个解析器。 每一种解析器都是一个运行环境&#xff0c;不但…

[Qt之“MMM dd yyyyhh:mm:ss“]时间格式

这是时间格式字符串&#xff0c;用于表示日期和时间的显示格式。具体解释如下&#xff1a; “MMM”&#xff1a;表示月份的缩写&#xff0c;例如Jan、Feb、Mar等。“dd”&#xff1a;表示日期的两位数&#xff0c;例如01、02、03等。“yyyy”&#xff1a;表示年份的四位数&…

数据特征工程 | 主成分分析(Python)

特征抽取(feature extraction)和特征选择(feature selection)不一样,特征抽取是从原特征集中推导出有用的信息构成新的特征集。特征选择是从原特征集中选择一部分子集作为训练特征。 特征抽取将数据集从一个特征空间投影到了一个更低维度的特征空间。 主成分分析(princ…

Debezium日常分享系列之:Debezium2.4版本之用于 MongoDB的Debezium 连接器

Debezium日常分享系列之&#xff1a;Debezium2.4版本之用于 MongoDB的Debezium 连接器 一、综述二、改变流三、阅读偏好四、MongoDB 连接器的工作原理五、支持的 MongoDB 拓扑六、所需的用户权限七、逻辑连接器名称八、执行快照九、临时快照十、增量快照1.增量快照流程2.Debezi…

Kubernetes - Ingress HTTP 负载搭建部署解决方案(新版本v1.21+)

在看这一篇之前&#xff0c;如果不了解 Ingress 在 K8s 当中的职责&#xff0c;建议看之前的一篇针对旧版本 Ingress 的部署搭建&#xff0c;在开头会提到它的一些简介Kubernetes - Ingress HTTP 负载搭建部署解决方案_放羊的牧码的博客-CSDN博客 开始表演 1、kubeasz 一键安装…

十大排序算法(C语言)

参考文献 https://zhuanlan.zhihu.com/p/449501682 https://blog.csdn.net/mwj327720862/article/details/80498455?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169837129516800222848165%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&…

ffmpeg x264 x265 fdk-aac 编译记录

ffmpeg 裁剪定制编译过多次了 这里记录下 主题部分 关于ffmpeg自定义编解码器 FFmpeg codec HOWTO - MultimediaWiki 一 环境 ubuntu 18.04 ffmpeg: v4.2.2 ndk :android-ndk-r20b-linux-x86_64 fdk-aac 0.1.5 x264: 0.164.x 1.1 下载编译fdk-aac wget http://ja…

星闪技术 NearLink 一种专门用于短距离数据传输的新型无线通信技术

本心、输入输出、结果 文章目录 星闪技术 NearLink 一种专门用于短距离数据传输的新型无线通信技术前言星闪技术 NearLink 的诞生背景星闪技术 NearLink 简介星闪技术 NearLink 技术是一种蓝牙技术吗星闪技术 NearLink 优势星闪技术 NearLink 应用前景弘扬爱国精神星闪技术 Nea…

互联多区域电网的负荷频率控制研究

摘要 电力行业的发展程度是衡量国民经济水平以及国家安全保障的一项重要指标。多区域负荷频率控制系统作为现代电力系统发展的重要趋势&#xff0c;在可靠性、经济性和稳定性上都具备一定的优势。保证系统稳定和输出电能的质量是电网运行的关键。电力系统输出电能质量的优劣取决…

10000字!图解机器学习特征工程

文章目录 引言特征工程1.特征类型1.1 结构化 vs 非结构化数据1.2 定量 vs 定性数据 2.数据清洗2.1 数据对齐2.2 缺失值处理 原文链接&#xff1a;https://www.showmeai.tech/article-detail/208 作者&#xff1a;showmeAI 引言 上图为大家熟悉的机器学习建模流程图&#xff0c;…

技术资料MF74:将图像插入单元格注释

【分享成果&#xff0c;随喜正能量】须知往生净土&#xff0c;全仗信、愿。有信、愿&#xff0c;即未得三昧、未得一心不乱&#xff0c;亦可往生。且莫只以一心不乱&#xff0c;及得念佛三昧为志事&#xff0c;不复以信、愿、净念为事。。 我给VBA的定义&#xff1a;VBA是个人…

通过Vue自带服务器实现Ajax请求跨域(vue-cli)

通过Vue自带服务器实现Ajax请求跨域&#xff08;vue-cli&#xff09; 跨域 原理&#xff1a;从A页面访问到B页面&#xff0c;并且要获取到B页面上的数据&#xff0c;而两个页面所在的端口、协议和域名中哪怕有一个不对等&#xff0c;那么这种行为就叫跨域。注意&#xff1a;类…

23种设计模式(10)——门面模式

门面模式(Facade Pattern)又叫作外观模式&#xff0c;提供了一个统一的接口&#xff0c;用来访问子系统中的一群接口。其主要特征是定义了一个高层接口&#xff0c;让子系统更容易使用&#xff0c;属于结构型设计模式。 其实&#xff0c;在日常编码工作中&#xff0c;我们都在有…

[LaTeX] [数学符号] \mathbb{1}的各种替代方案:解决在 LaTeX 中输入黑板粗体的数字

[LaTeX] [数学符号] \mathbb{1}的各种替代方案&#xff1a;解决在 LaTeX 中输入黑板粗体的数字_latex mathbb-CSDN博客文章浏览阅读5w次&#xff0c;点赞36次&#xff0c;收藏80次。本文介绍如何在 LaTeX 中输入黑板粗体的数字。_latex mathbbhttps://blog.csdn.net/xovee/arti…

Python爬虫-经典案例详解

爬虫一般指从网络资源的抓取&#xff0c;通过Python语言的脚本特性&#xff0c;配置字符的处理非常灵活&#xff0c;Python有丰富的网络抓取模块&#xff0c;因而两者经常联系在一起Python就被叫作爬虫。爬虫可以抓取某个网站或者某个应用的内容提取有用的价值信息。有时还可以…

Android Studio 查看Framework源码

1、背景 安卓系统源码量很庞大&#xff0c;选择好的开发工具和方式去开发可以提升开发效率&#xff0c;常用的开发工具有Source Insight 、Visual Studio Code、Android Studio&#xff0c;vscode适合C和C代码开发&#xff0c;java层代码无法跳转和提示&#xff0c;因此&#…

2023 年江西省职业院校技能大赛软件测试(高职组)赛项样题

2023 年江西省职业院校技能大赛软件测试&#xff08;高职组&#xff09;赛项样题 任务一&#xff1a;功能测试&#xff08;45 分&#xff09; 1、测试计划&#xff08;5 分&#xff09; 任务描述 针对功能测试任务&#xff0c;划分和界定测试范围&#xff0c;分解测试任务&…

vue3基础流程

目录 1. 安装和创建项目 2. 项目结构 3. 主要文件解析 3.1 main.js 3.2 App.vue 4. 组件和Props 5. 事件处理 6. 生命周期钩子 7. Vue 3的Composition API 8. 总结和结论 响应式系统&#xff1a; 组件化&#xff1a; 易于学习&#xff1a; 灵活性&#xff1a; 社…