socket网络编程中设置socket选项的ioctlsocket、setsockopt和WSAIoctl函数的使用(附源码)

news2024/11/18 4:34:51

VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具从入门到精通案例集锦(专栏文章正在更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/131405795C/C++基础与进阶(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_11931267.html       在socket网络编程中,我们时常要设置socket套接字相关选项,设置不同的选项要调用的函数可能是不一样的,比如ioctlsocket、setsockopt和WSAIoctl函数。这三个函数很容易混淆,今天我们就来讲讲这几个函数主要是用来设置哪些选项的。

1、ioctrlsocket函数

       ioctlsocket函数主要是用来设置或取消非阻塞套接字的。将套接字设置为非阻塞式套接字后,connect、send和recv等函数将变成非阻塞式的,调用后会立即返回,执行的操作结果成功与否,需要通过后续代码去判断。

       设置非阻塞式套接字的代码如下:

unsigned long unblock = 1;
int ret = ioctlsocket(tSock, FIONBIO, (unsigned long *)&unblock);

2、setsockopt函数

       setsockopt可以用来设置套接字的一系列选项,最常用的是用来设置接收缓冲区和发送缓冲区大小的,如下所示:

// 设置发送缓冲区大小
int optVal = 2*1024*1024; // 2MB
setsockopt(tSock, SOL_SOCKET, SO_SNDBUF, (char *)&optVal, sizeof(optVal));

// 设置接收缓冲区大小
optVal = 2*1024*1024; // 2MB
setsockopt(tSock, SOL_SOCKET, SO_RCVBUF, (char *)&optVal, sizeof(optVal));

3、WSAIoctl函数

       WSAIoctl则主要用来设置TCP连接的心跳参数的,这个心跳参数是属于TCPIP协议栈中的。设置的心跳参数对应如下的结构体:

/* Argument structure for SIO_KEEPALIVE_VALS */
struct tcp_keepalive {
    u_long  onoff;
    u_long  keepalivetime;
    u_long  keepaliveinterval;
};
 

       其中,keepalivetime 成员用来指定在发送第一个 keep-alive 数据包后到发送下个keep-alive 数据包之间的间隔时间(以毫秒为单位)。 keepaliveinterval 成员用来指定当发送keep-alive 数据包后未收到确认消息超时时发送连续 keep-alive 数据包之间的间隔(以毫秒为单位)

       在设置心跳参数之前,要先调用setsockopt打开心跳包设置选项。相关代码如下所示:

// 先调用setsockopt打开发送心跳包(设置)选项
int optval = 1;
if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (const char *)&optval, optlen) < 0)
	return 1;

// 设置心跳参数
struct tcp_keepalive alive;
alive.onoff = TRUE;
alive.keepalivetime = 10*1000;
alive.keepaliveinterval = 10*1000;
 
DWORD dwBytesRet;
WSAIoctl(fd, SIO_KEEPALIVE_VALS, &alive, sizeof(alive), NULL, 0, &dwBytesRet, NULL, NULL))

       有人可能会说,不是还有个心跳包探测次数的设置参数吗?上述结构体tcp_keepalive中并没有这个参数,那是因为Windows操作系统中的心跳探测次数是固定为10次,是不可修改的。Linux系统中是可以修改的。

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

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

相关文章

AI发展历史

一、AI的发展历史 二、AI发展的第五阶段 &#xff08;一&#xff09;、第一阶段 1.艾伦图灵与模仿游戏 艾伦•图灵&#xff08;Alan Turing&#xff0c;1912~1954&#xff09;是英国数学家、逻辑学家&#xff0c;被称为计算机科学之父&#xff0c;人工智能之父。二战中协助军…

vue重修004【下部】

文章目录 版权声明非父子通信event bus 事件总线实现步骤代码演示 非父子通信-provide&inject语法注意代码演示 v-model原理表单类组件封装& v-model 简化代码.sync修饰符语法代码示例 ref 和 $refs语法代码演示 异步更新 & $nextTick引子$nextTick演示 版权声明 …

javaee ssm框架项目添加分页控件

搭建ssm框架项目 参考上一篇博文 添加分页控件 引入依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schema…

关联规则挖掘(下):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

Kubernetes安装部署 1

本文主要描述kubernetes的安装部署&#xff0c;kubernetes的安装部署主要包括三个关键组件&#xff0c;其中&#xff0c;包括kubeadm、kubelet、kubectl&#xff0c;这三个组件的功能描述如下所示&#xff1a; Kubeadm 用于启动与管理kubernetes集群 Kubelet 运行在所有集群的…

[晕事]今天做了件晕事21;设置代理访问网站的时候需注意的问题

今天在家上班&#xff0c;设置好VPN&#xff0c;通过代理来访问公司内部的一个系统浏览器的反应如下&#xff1a; Hmmm… can’t reach this page ***.com refused to connect. 这个返回的错误&#xff0c;非常的具有迷惑性&#xff0c;提示的意思&#xff1a;拒绝链接&#xf…

Kaggle - LLM Science Exam(二):Open Book QAdebertav3-large详解

文章目录 前言&#xff1a;优秀notebook介绍三、Open Book Q&A3.1 概述3.2 安装依赖&#xff0c;导入数据3.3 数据预处理3.3.1 处理prompt3.3.2 处理wiki数据 3.4 使用faiss搜索获取匹配的Prompt-Sentence Pairs3.5 查看context结果并保存3.6 推理3.6.1 加载测试集3.6.2 定…

模型压缩部署概述

模型压缩部署概述 一&#xff0c;模型在线部署 1.1&#xff0c;深度学习项目开发流程 1.2&#xff0c;模型训练和推理的不同 二&#xff0c;手机端CPU推理框架的优化 三&#xff0c;不同硬件平台量化方式总结 参考资料 一&#xff0c;模型在线部署 深度学习和计算机视觉…

POJ 3264 Balanced Lineup 线段树 / 平方分割

一、题目大意 给出一个长度为 n&#xff08;n<50000) 数组 arr&#xff0c;进行Q次查询&#xff08;Q<200000&#xff09;&#xff0c;每次查询的内容为数组arr在 [L , R] 的切片的极差&#xff08;最大元素 - 最小元素&#xff09; 二、解题思路 1、线段树 区间极差…

[每周一更]-(第65期):Docker容器监控工具推荐

Docker 容器化监控工具用于监视和管理 Docker 容器的性能、资源使用情况、日志、事件和状态等。以下是一些常用的 Docker 容器监控工具&#xff1a; Docker 自带的监控功能: Docker Stats: Docker 内置的命令&#xff0c;用于实时显示运行中容器的资源使用情况&#xff0c;包括…

QGIS文章五——对遥感影像进行土地类型分类-选择遥感影像

关于下载遥感影像的地方有很多&#xff1a; 1、国家综合地球观测数据共享平台&#xff08;https://www.chinageoss.cn/&#xff09; 2、地理空间数据云&#xff08;https://www.gscloud.cn/&#xff09; 3、美国地质勘探局官网&#xff08;https://earthexplorer.usgs.gov/&…

RabbitMQ之Direct(直连)Exchange解读

目录 基本介绍 使用场景 springboot代码演示 演示架构 工程概述 RabbitConfig配置类&#xff1a;创建队列及交换机并进行绑定 MessageService业务类&#xff1a;发送消息及接收消息 主启动类RabbitMq01Application&#xff1a;实现ApplicationRunner接口 基本介绍 在r…

【多线程进阶】CAS实现及应用

文章目录 前言1. 什么是 CAS2. CAS 是如何实现的3. CAS 有哪些应用3.1 实现原子类3.2 实现自旋锁 4. CAS 中 ABA 问题4.1 ABA 问题是什么4.2 ABA 引发的问题4.3 解决方案 总结 前言 上文讲解 synchronized 当提到自旋锁时, 讲到当其他线程进入竞争, 偏向锁状态被消除, 就会进入…

简单聊一聊公平锁和非公平锁,parallel并行流

目录 一、降低锁的粒度&#xff0c;将synchronized关键字不放在方法上了&#xff0c;改为synchronized代码块。二、先区分一下公平锁和非公平锁1、公平锁2、非公平锁3、公平锁的优缺点&#xff1a;4、非公平锁的优缺点&#xff1a; 三、是否对症下药四、IntStream.rangeClosed是…

C++ - C++11历史 - 统一列表初始化 - aotu - decltype - nullptr - C++11 之后 STL 的改变

C的发展史了解 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。 不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标…

15046-2011 脂肪酰二乙醇胺 学习笔记

声明 本文是学习GB-T 15046-2011 脂肪酰二乙醇胺.pdf而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了脂肪酰二乙醇胺的产品分类、要求、试验方法、检验规则和标志、包装、运输、贮存和保 质期。 本标准适用于由脂肪酸甲酯或脂肪…

C++(反向迭代器)

前言&#xff1a; 上一章我们介绍了适配器&#xff0c;也提了一下迭代器适配器&#xff0c;今天我们就从反向迭代器把迭代器适配器给解释一下。 既然 都叫迭代器容器了 就说名只要接口合适他可以封装实现各种容器需求包括vector list 。 目录 1.反向迭代器设计 1.1反向迭代…

浅谈电气防火限流式保护器在小型人员密集场所中的应用

摘要&#xff1a;本文通过结合城市中小型人员密集场所的特点和电气防火限流式保护器的功能&#xff0c;阐述了该类筑物预防电气火灾事故的方法。 关键词&#xff1a;小型人员密集场所&#xff1b;电气防火限流式保护器 0&#xff1a;概述 近年来&#xff0c;随着社会经济的不…

C++标准模板(STL)- 类型支持 (定宽整数类型)(INT8_C,INTMAX_C,UINT8_C,UINTMAX_C,格式化宏常量)

最小宽度整数常量的函数宏 INT8_CINT16_CINT32_CINT64_C 展开成拥有其实参所指定的值且类型分别为 int_least8_t、int_least16_t、int_least32_t、int_least64_t 的整数常量表达式 (宏函数) INTMAX_C 展开成拥有其实参所指定的值且类型为 intmax_t 的整数常量表达式 (宏函数) U…

pytorch算力与有效性分析

pytorch Windows中安装深度学习环境参考文档机器环境说明3080机器 Windows11qt_env 满足遥感CS软件分割、目标检测、变化检测的需要gtrs 主要是为了满足遥感监测管理平台&#xff08;BS&#xff09;系统使用的&#xff0c;无深度学习环境内容swin_env 与 qt_env 基本一致od 用于…