linux套接字选项API

news2024/10/7 19:23:48

获取套接字的选项值(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.coloradmin.cn/o/1136179.html

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

相关文章

视图,触发器与存储过程

python操作MySQL SQL的由来: MySQL本身就是一款C/S架构&#xff0c;有服务端、有客户端&#xff0c;自身带了有客户端&#xff1a;mysql.exe python这门语言成为了MySQL的客户端(对于一个服务端来说&#xff0c;客户端可以有很多) 操作步骤&#xff1a; 1. 先链接MySQL …

Compose横向列表和网格列表

横向列表LazyRow LazyRow和LazyColumn使用类似。 /*** 横向列表LazyRow*/ Composable fun LazyRowTest() {val context LocalContext.currentval dataList arrayListOf<Int>()for (index in 1..50) {dataList.add(index)}LazyRow {items(dataList) { data ->Box(mo…

大数据可视化BI分析工具Apache Superset实现公网远程访问

大数据可视化BI分析工具Apache Superset实现公网远程访问 文章目录 大数据可视化BI分析工具Apache Superset实现公网远程访问前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网…

CentOS 安装 tomcat 并设置 开机自启动

CentOS 安装 tomcat 并设置 开机自启动 下载jdk和tomcat curl https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz curl https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.15/bin/apache-tomcat-10.1.15.tar.gz解压jdk和tomcat并修改目录名称 tar -z…

Linux下利用Docker快速部署Kafka

1.摘要 在本文中,介绍了利用Docker安装Kafka的基础环境要求; 利用Docker安装zookeeper过程; 利用Docker安装Kafka过程;进入容器配置生产者和消费者过程; 演示生产者和消费者通讯; 故障排查方法。 2.基础环境准备 提前准备一台安装Linux系统的主机或虚拟机,我这里安装的是Ubu…

Photoshop使用笔记总目录

Photoshop基础学习之工具学习 一、【Photoshop界面认识】 二、【 Photoshop常用快捷键】 三、【色彩模式与颜色填充】 四、【选区】 五、【视图】 六、【常用工具组】 七、【套索工具组】 八、【快速选择工具组】 九、【裁剪工具组】 十、【图框工具组】 十一、【吸取…

二叉树中的topk问题(带图详解)

&#x1f5e1;CSDN主页&#xff1a;d1ff1cult.&#x1f5e1; &#x1f5e1;代码云仓库&#xff1a;d1ff1cult.&#x1f5e1; &#x1f5e1;文章栏目&#xff1a;数据结构专栏&#x1f5e1; TopK问题 在给定的n的数据中&#xff0c;求出这n个数据中最大的k个数字 TopK的代码&a…

C++通过指针获取类的私有成员

前言 C并没有类似java的反射机制&#xff0c;可以暴力获取类的私有成员。然而C因程序员自行管理内存&#xff0c;所以可以通过指针干任何事情。当然&#xff01;操作指针是非常危险的&#xff0c;谨慎操作&#xff01; // dome.cpp : 此文件包含 "main" 函数。程序执…

HackTheBox-Starting Point--Tier 0---Redeemer

文章目录 一 题目二 实验过程 一 题目 Tags Redis、Vulnerability Assessment、Databases、Reconnaissance、Anonymous/Guest Access译文&#xff1a;redis、漏洞评估、数据库、侦察、匿名/访客访问Connect To attack the target machine, you must be on the same network.…

微信智能对话初体验:5分钟搭建免费专属的智能对话机器人

写在前面 投入AI创业几个月了&#xff0c;AI小程序快要上线了&#xff0c;已经在备案审批中&#xff0c;想一起AI搞事情的可以联系我看是否有合作机会。昨天刷X时&#xff0c;看到有人说微信新上线了这个平台&#xff1a;https://chatbot.weixin.qq.com/&#xff0c;赶紧试试&…

VulnHub metasploitable-1

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

科技联众,互利共赢 | 卡驰科技(深圳)有限公司CEO张倍铭博士到访拓世科技集团,共探跨境电商,海外拓展无限可能

在创新的浪潮中&#xff0c;人工智能以其强大的能量持续推动着各行各业的进步&#xff0c;拓世科技集团作为人工智能领域的引领者&#xff0c;通过不断合作和交流&#xff0c;与众多领域的佼佼者共同探讨数字时代的无限可能。卡驰科技&#xff08;深圳&#xff09;有限公司作为…

跨境商城开发:10个关键步骤带你实现全球销售

在数字化时代&#xff0c;跨境电商成为企业扩大市场规模的重要策略之一。本文将揭示为何跨境商城开发是实现全球销售的绝佳途径&#xff0c;以及为什么你应该专注于跨境商城的开发与建设。 十个必备步骤&#xff0c;助你成功搭建跨境商城 第一步&#xff1a;市场研究与目标定…

pdf转jpg的方法【ps和工具方法】

pdf转jpg的方法&#xff1a; 1.photoshop办法&#xff1a; pdf直接拖入ps中&#xff0c;另存为*.Jpg文件即可 另外注意的时候&#xff0c;有时候别人给你pdf文件中包含你需要的jpg文件&#xff0c;千万不要截图进入ps中&#xff0c;直接把文件拖入ps中&#xff0c;这样的文件…

元宇宙游戏大爆炸,UTONMOS元宇宙游戏成爆品

随着元宇宙概念不断的被深化&#xff0c;目前许多用户群体已经注意到并加入元宇宙领域。而元宇宙比较火的场景有社交、游戏、虚拟会议等&#xff0c;其中元宇宙游戏开发是较火的一个赛道&#xff0c;成为元宇宙从业者们入局的方向。 相比国内其他公司还处于概念阶段&#xff0…

STM32 中断NVIC详解,配置及示例

NVIC全称 Nested Vectored Controller 嵌套向量中断控制器 它是一种硬件设备&#xff0c;用于管理和协调处理器的中断请求。NVIC可以管理多个中断请求&#xff0c;并按优先级处理它们。当一个中断请求到达时&#xff0c;NVIC会确定其优先级并决定是否应该中断当前执行的程序&am…

python自动化测试(二):获取元素定位的基本方式

目录 一、前置代码 二、通过HTML元素ID的方式去进行元素定位 三、通过HTML元素的name属性进行元素定位 四、练习一&#xff1a;打开百度登录界面并输入数据后登录 五、通过HTML元素的类名来进行元素定位 六、通过链接的文本值方式进行元素定位 七、通过部分的链接文本值…

mac电脑怎么永久性彻底删除文件?

Mac老用户都知道在我们查看Mac内存时都会发现有一条“其他文件”占比非常高&#xff0c;它是Mac储存空间中的“其他”数据包含不可移除的移动资源&#xff0c;如&#xff0c;Siri 语音、字体、词典、钥匙串和 CloudKit 数据库、系统无法删除缓存的文件等。这些“其他文件”无用…

如何使用Abaqus进行跌落仿真

跌落测试通常是主要用来模拟产品在搬运期间可能受到的自由跌落&#xff0c;考察产品抗意外冲击的能力。通常跌落高度大都根据产品重量以及可能掉落机率作为参考标准&#xff0c;落下表面应该是混凝土或钢制成的平滑、坚硬的刚性表面&#xff08;如有特殊要求应以产品规格或客户…

word英文论文检查标点是否正确

背景 英文论文&#xff0c;国内很多都是word模板&#xff0c;我们在搞完文章内容后&#xff0c;往往需要做点关于标点符号的检查。 检查内容 我个人经验来讲&#xff0c;有如下&#xff1a; . 后面有没有加空格&#xff0c;并且下一句话首字母大写。, 后面有没有加空格&…