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

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.hqwc.cn/news/132331.html

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

相关文章

springboot单独在指定地方输出sql

一般线上项目都是将日志进行关闭&#xff0c;因为mybatis日志打印&#xff0c;时间长了&#xff0c;会占用大量的内存&#xff0c;如果我想在我指定的地方进行打印sql情况&#xff0c;怎么玩呢&#xff01; 下面这个场景&#xff1a; 某天线上的项目出bug了&#xff0c;日志打印…

机器人控制算法——移动机器人横向控制最优控制LQR算法

1.Introduction LQR (外文名linear quadratic regulator)即线性二次型调节器,LQR可得到状态线性反馈的最优控制规律,易于构成闭环最优控制。LQR最优控制利用廉价成本可以使原系统达到较好的性能指标(事实也可以对不稳定的系统进行整定) ,而且方法简单便于实现 ,同时利用 Ma…

【算法-动态规划】贝尔曼福特算法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

1700*C. Mixing Water(数学 | 二分)

Problem - 1359C - Codeforces 解析&#xff1a; 因为每次先加热水&#xff0c;再加凉水&#xff0c;所以温度的范围肯定在 [ ( hc ) / 2 , h ] 所以当 t 为 h时&#xff0c;结果为 1 当 t 小于( hc ) / 2时&#xff0c;肯定为2 &#xff08;一杯热水和一杯冷水&#xff09; …

【excel技巧】如何在Excel表格中添加选项按钮?

不知道大家是否会9遇到需要勾中选项的情况&#xff0c;我们可以在电子表格中制作出可以勾选、选中的选项按钮&#xff0c;今天我们一起学习一下设置方法。 首先&#xff0c;我们需要先在excel工具栏中添加一个功能模块&#xff1a;开发工具 依次点击excel中的文件 – 选项 –…

互动设计:深入了解用户体验的关键

交互是人与计算机系统之间的互动过程。在计算机领域中&#xff0c;交互是人机交互技术的核心内容之一。交互设计是一种基于人类行为科学、心理学、人体工程学等领域的专业设计&#xff0c;目的是创造用户友好的、易于使用的计算机软件、网络、移动应用等。交互的本质在于用户的…

Spring之IoC

Spring的设计理念和整体架构 一句话概括就是&#xff1a;Spring是一个轻量级的、非侵入式的控制反转(IOC)和面向切面(AOP)的框架。 设计理念&#xff1a; 松散耦合&#xff1a; Spring鼓励开发者编写松散耦合的代码&#xff0c;通过依赖注入和接口抽象等方式来减少组件之间的…

语音芯片基础知识 什么是语音芯 他有什么作用 发展趋势是什么

目录 一、语音芯片的简介 常见的语音芯片有哪些&#xff1f; 语音芯片的种类有很多&#xff0c;大体区分下来也就4个类别而已&#xff1a; 选型的经验说明如下&#xff1a; 推荐使用flash型语音芯片 一、语音芯片的简介 语音芯片基础知识&#xff1a; 什么是语音芯片&…

consumer罢工,几千万条im聊天数据积压在MQ中,解决思路

最近遇到一个线上问题&#xff0c;consumer出问题了&#xff0c;导致几千万条im聊天数据积压在MQ中几个小时&#xff0c;从下午五点多&#xff0c;积压到晚上十二点多。 遇到这种事一种解决办法是&#xff0c;修复consumer&#xff0c;让它慢慢消费。这样搞的话展示不了实力。 …

go 项目打包部署到服务器

1、window打包到Linux 步骤1 依次执行一下命令&#xff0c;就会得到一个exe 文件 步骤2 把打包的文件&#xff0c;放到服务器上&#xff08;可以使用FinalShell工具&#xff09; chmod x main # 执行这个命令&#xff0c;给main 文件添加 执行权限&#xff0c;然后执行 ls &…

书客、柏曼、爱德华哪款比较值得入手?三款台灯多维度测评

随着现在孩子的近视趋势越来越严峻&#xff0c;有很多家长开始意识到自己的孩子也出现了揉眼睛、时不时眯眯眼的情况。而台灯作为守护孩子用眼环境的必备用品&#xff0c;很多家长想给孩子购置一款护眼灯&#xff0c;却看见市面琳琅满目的款式根本不知道怎么购买。 所以今天为了…

3D模型格式转换工具HOOPS Exchange:模型数据自由导入和导出

HOOPS Exchange是一套高性能软件库&#xff0c;可以为软件开发人员提供导入和导出3D文件格式的能力。HOOPS Exchange导入3D数据后&#xff0c;会将3D数据转换为PRC格式存放到内存中&#xff0c;最后导出成为其他3D格式。&#xff08;点击申请HOOPS Exchange免费试用&#xff09…