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,一经查实,立即删除!

相关文章

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

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

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

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

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&…

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

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

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;类…

[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…

Android Studio 查看Framework源码

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

Java中级面试题记录(四)

一面面试题 1.Innodb的行数据存储模式 https://baijiahao.baidu.com/s?id1775090633458928876&wfrspider&forpc 2.行数据包含哪些信息&#xff1f; https://baijiahao.baidu.com/s?id1775090633458928876&wfrspider&forpc 3.MySQL在进行存储VARCHAR的时…

DDOS版-超功能记事本 Ⅲ 8.8源码

DDOS版-超功能记事本 Ⅲ 8.8源码 下载地址&#xff1a;https://user.qzone.qq.com/512526231/main

goland无法调试问题解决

goland 无法调试问题解决 golang 版本升级后&#xff0c;goland 无法进行调试了 首先请看自己下载的版本是否有误 1.apple系 M系列芯片的 arm64版本 2.apple系 intel系列芯片的x86_64 3.windows系 intel解决如下&#xff1a; 查看gopath ericsanchezErics-Mac-mini gww-api…

C/C++数据结构之深入了解线性表:顺序表、单链表、循环链表和双向链表

线性表是一种基本的数据结构&#xff0c;它在计算机科学中起着至关重要的作用。线性表用于存储一系列具有相同数据类型的元素&#xff0c;这些元素之间存在顺序关系。在C/C中&#xff0c;我们可以使用各种方式来实现线性表&#xff0c;其中包括顺序表、单链表、循环链表和双向链…

【golang】Windows环境下Gin框架安装和配置

Windows环境下Gin框架安装和配置 我终于搞定了Gin框架的安装&#xff0c;花了两三个小时&#xff0c;只能说道阻且长&#xff0c;所以写下这篇记录文章 先需要修改一些变量&#xff0c;这就需要打开终端&#xff0c;为了一次奏效&#xff0c;我们直接设置全局的&#xff1a; …

大厂面试题-JVM中的三色标记法是什么?

目录 问题分析 问题答案 问题分析 三色标记法是Java虚拟机(JVM)中垃圾回收算法的一种&#xff0c;主要用来标记内存中存活和需要回收的对象。 它的好处是&#xff0c;可以让JVM不发生或仅短时间发生STW(Stop The World)&#xff0c;从而达到清除JVM内存垃圾的目的&#xff…

代码随想录Day31 贪心06 T738 单调递增的数字 T968监控二叉树

LeetCode T738 单调递增的数字 题目链接:738. 单调递增的数字 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 我们以332举例,题目要我们获得的是小于等于332的最大递增数字,我们知道这个数字要递增只能取299了,332 -- 329 --299 我们从后向前遍历,只要前一位大于后一位,我…

系统架构设计师之使用McCabe方法可以计算程序流程图的环形复杂度

系统架构设计师之使用McCabe方法可以计算程序流程图的环形复杂度

conda虚拟环境配置

命令行输入&#xff0c;conda -V 确定conda版本 创建自己的conda虚拟环境 activate 回车 conda create -n 名字 python版本号 执行命令 确认执行命令 输入y 创建完成 激活环境 conda activate 名字 进入python环境 python 退出 exit() conda deactive