浅谈(一): WinSocket select()用法

select函数详解 select函数详解背景说明定义介绍、参数说明原理返回值pselect总结案例案例1案例2 说明:本文整合网络资源和man帮助文档,请酌情参考。 背景 select函数是实现IO多路复用的一种方式。 什么是IO多路复用? 举一个简单地网络服务器的例子,如果你的服务器需要和多个客户端保持连接,处理客户端的请求,属于多进程的并发问题,如果创建很多个进程来处理这些IO流,会导致CPU占有率很高。所以人... 阅读详情

 

在进行TCP编程时,通常要用到select来管理socket,比如,设置recv接收数据超时时间,对方是否已经非正常关闭连接等。

 

select  函数原型:

 

 

int select (
  int nfds,                                         	//用来与Berkely socket兼容, 通常写0
  fd_set* readfds,                            //检查可读性的socket集合
  fd_set* writefds,                           //检查可写性的socket集合
  fd_set* exceptfds,	                       //检查异常的socket集合
  const struct timeval* timeout      // 设置超时时间 	
);
返回值:
    readfds, writefds, exceptfds中被检查复合条件的socket总数。
注意:
   由于select每次返回时,readfds, writefds, exceptfds都会被改变,所以,下次调用select前,要重新初始化fds。
对于三种检查各自如下:
readfds:
> 若当前socket处在listen状态,则有个连接到来,调用accept将成功建立连接
>若连接已经建立,则意味着有新数据到来,此时可以调用recv接收数据
>对方连接终止,调用recv,根据返回值判断是否是正常终止: 0 对方正常终止, ErrorCode 对方重置连接或强制断开连接
writefds:
>当前socket调用了connect, 则成功连接
>当前socket调用了send,则能成功发送出去
exceptfds:
>当前socket调用connect,则连接失败
>OOB 数据可读(暂时没研究,OOB是什么个东东)
以下附上简单的测试代码:
server端:
 
client端:
 

 

R语言绘图进阶:五大工具高效组合多图(cowplot、patchwork、layout、par、gridExtra) 本文详细介绍了R语言中五大高效组合多图的工具:cowplot、patchwork、layout、par和gridExtra。针对不同场景提供了实用指南,帮助数据分析师解决图表排版难题,提升报告专业度。特别推荐cowplot用于ggplot2图形组合,patchwork提供最简洁语法,layout则支持完全自定义布局。 阅读详情

相关推荐

SAP Script表单开发中ABAP preform方法的实战应用与调试技巧

本文深入探讨了在SAP Script表单开发中调用ABAP程序(preform方法)的实战应用与调试技巧。通过一个获取供应商版本名称的实例,详细讲解了如何在SE71中嵌入PERFORM指令、编写ABAP子程序进行数据查询与处理,并重点介绍了使用SAP Script Debugger进行高效调试的方法,帮助开发者灵活扩展表单功能,实现复杂业务逻辑。

o0p1q2r3的博客 552

windows socket网络编程二:select模型

文章目录分析服务器定义一个装socket的结构select处理错误处理可写处理可读关闭服务器运行结果源码链接 分析 我们思考一下前面的程序有什么缺点? 我们在调试程序的时候可以发现我们服务器在启动后,如果不打开客户端就一直卡着。 乍一看可能没什么问题,因为我们只有一个客户端,如果我们有多个客户端,由于accept、recv是傻等阻塞的,做其中一件事,另外一件事就做不了,在傻傻的等着,服务器完全无法正常工作。 解决方法: 我们可以给操作系统一组SOCKET,让系统帮我们监视着SOCKET的动向,哪个SOCKE

c++小白的博客 3357

KBS投稿全流程拆解:从模板准备到条件接收的实战指南

本文详细拆解了KBS期刊投稿的全流程,从模板准备、投稿系统操作到返修策略和条件接收。重点介绍了Cover Letter撰写技巧、Latex模板选择、审稿周期管理以及返修文件的系统准备方法,帮助研究者高效完成KBS投稿并提升接收概率。

weixin_26938645的博客 705

WinSocket模型的探讨——select模型

查找了很多资料都找不到select模型的详细用法,《Windows网络编程》这本书上也只是写了一个简单的回应服务器,就连writefds的用法都没讲,也不知道什么时候利用“可写”来发文件。这些都是我的疑问,相信很多研究网络编程的同路人也碰到了我的这些问题。这些疑问在这篇文章中都解决了!耗费了偶很多的精力去猜测去思考! 感觉一些已经得道的高人都不肯把这些问题说透彻点,唉,只能靠自己去摸索了,希望

一雨田的专栏 9610

保姆级教程:用CANoe手把手复现ECU刷写全流程(含BootLoader三阶段详解)

本文提供了一份详细的CANoe ECU刷写实战指南,涵盖BootLoader三阶段的深度解析。从实验环境搭建到预编程、主编程及后编程阶段,逐步讲解ECU刷写的关键步骤和隐藏逻辑,特别强调UDS诊断和CAN通信的精确控制,帮助开发者掌握ECU刷写的核心技术。

weixin_29234423的博客 531

数字IC后端设计实现OCC(On-chip Clock Controller)电路介绍及时钟树综合案例

数字IC后端设计实现OCC(On-chip Clock Controller)电路介绍及时钟树综合案例

weixin_37584728的博客 4740

C++ Windows Socket五种I/O模型之Select模型

概述 Windows操作系统提供了选择(Select)、异步选择 (WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口 (Completion Port)共五种I/O模型。每一种模型均适用于一种特定的应用场景。今天主要讲一下Select 模型。 涉及的API int WSAAPI select( int nfds, fd_set *readfds, fd_set *writefds,

weixin_45317033的博客 984

小红书高时效推荐系统背后的技术升级

在小红书 APP 中,推荐系统的实效性对推荐效果有着特别重要的影响,特别是作为 UGC 平台,小红书的推荐系统如果能更快地捕捉用户与笔记之间的变化和联系,就能够给推荐带来更好的效果。在2021年上半年,首页推荐的召回、粗排、精排的主要模块都保持在天级更新的状态,我们通过持续迭代,将召回 CF 渠道、召回索引更新、召回模型/粗精排模型的训练都做到了分钟级更新,为首页推荐的分发效率带来飞跃式提升,并给业务侧带来非常显著的收益。 小红书站内“最近一天内发布的新笔记”在首页的曝光占比一直很高,这段时间更是快速

REDtech_1024的博客 3528

C/C++ Socket套接字设置接收超时方法(设置非阻塞、超时时间)(fcntl、select、setsockopt)

setsockopt函数用于设置指定的Socket选项。sockfd是要设置的Socket的文件描述符;level指定选项所在的协议层;optname是需要设置的选项的名称;optval指向包含新选项值的缓冲区;optlen是optval缓冲区的大小。使用setsockopt函数设置选项是一种直接且有效的方法来设置Socket接收超时。这种方法的优点是简单直观,只需要一行代码就可以完成设置。然而,它的缺点是灵活性较差,因为它只能设置一个固定的超时时间,而不能动态地根据网络状况调整超时时间。

Dontla的博客 6426

C# 与欧姆龙 PLC 实战:通过 Ethernet/IP 协议进行设备控制与监控

本文介绍了如何通过C#和Ethernet/IP协议实现与欧姆龙PLC的通信。Ethernet/IP是基于以太网的工业协议,适用于工业设备间的实时数据交换。文章详细讲解了使用EthernetIPSharp库建立连接、读写数据的步骤,并提供了示例代码。此外,还探讨了实时监控、报警系统等高级功能,为工业自动化控制系统开发提供了实用指导。该方法简化了PLC通信开发,提高了系统可靠性和智能化程度。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 814

把外部系统接到 SAP Build Process Automation 的两条路:前台直连与后台编排的完整范式

想把外部系统接入到你的【销售订单管理】审批流程,最稳妥的路径是:在流程里开一个,在 BTP 配好以为核心的 Destination,让前端经由approuter代理、后台通过 Cloud SDK 直连,任务处理用My Inbox或Task APIs,异步对接用。这套组合拳,既满足安全边界与运维规范,又能让前台与后台两个世界各取所需、自然衔接。SAP。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1661

Windows Socket 非阻塞模式开发

非阻塞套接字 非阻塞模式是指:套接字在执行操作时,调用的函数不管操作是否完成都会立即返回的工作模式。 非阻塞套接字在处理同时建立的多个连接等方面具有明显的优势。但是使用过程中有一定的难度。由于函数在操作没有完成后也仍然会返回,为了实现某些功能必须循环调用,直到完成功能为止。因此非阻塞模式会使程序效率非常低。 把套接字设置为非阻塞模式,即告诉系统:在调用WindowssocketAPI时...

系统运维 807

Android USB串口通信详解与实例

在Android开发中,USB串口通信是一个常见的需求,尤其是在与硬件设备进行交互时。通过USB串口,我们可以轻松地实现数据的发送与接收。本文将详细介绍如何使用库来实现Android设备与USB串口设备的通信。

m0_62153576的博客 678

WinSocket模型浅谈(转载)

SOCKET有两种模式——阻塞和非阻塞。 如果使用了阻塞,在某个时间点如果出现了网络问题,一边调用recv接收不到数据的时候,那就会导致程序挂在那里!对于这个问题有两种解决的方法:一是保证使用的环境永远不会出现这种情况,二是使用多线程(就算出现了阻塞的情况也就是线程挂了,主线程还是生龙活虎的)。 如果使用非阻塞的SOCKET,我们需要不断的去轮询看recv/send函数是否成功,如果不成功,我

zhangatm的博客 343

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[转载]Windows网络编程系列教程之四:Select模型

原文: http://www.51see.com/asp/bbs/public/bp_show.asp?t_id=200308131152297103 讲一下套接字模式和套接字I/O模型的区别。先说明一下,只针对Winsock,如果你要骨头里挑鸡蛋把UNIX下的套接字概念来往这里套,那就不关我的事。 套接字模式:阻塞套接字和非阻塞套接字。或者叫同步套接字和异步套接字。 套接字模型:描述...

weixin_30819085的博客 369

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WindowsAPI 查阅笔记:网络通信

客户端:记得在编译的时候加上这个。不然会报错。服务端,得到连接后创建线程,执行处理函数。

1710orange的温馨小窝 400

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

windows 下socket recv 阻塞接收速度慢--send 阻塞发送慢

socket recv 阻塞速度很慢,mjpeg码流,jpeg一帧数据大约100k,但是接收时间需要93ms左右,有没有大侠知道怎么优化recv的接收的,指点下,电脑配置,cpu 2.6 奔腾双核,2G内存。   解决办法:  发现recv阻塞了,没有数据到来,在recv前使用select,后,recv 接收就不耗时间了。

smilestone322的专栏 5589

Select归纳总结

#include #include int select(int maxfdpl, fd_set *readset, fd_set *write, fd_set *exceptset, const struct timeval *timeout);

Denkensk的专栏 1163

Linux串口编程select函数返回-1,errno=22(EINVAL)原因

linux串口编程select

xiongpursuit88的博客 4516

Linux网络编程 | I/O复用之select

select的原理以及使用select系统调用的用途是:在一段指定时间内,监听用户感兴趣的文件描述符的可读、可写和异常等事件。 1.int select(int maxfd, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);//select 成功时返回就绪(可读、可写和异常)文件描述符的总数。如果在超时时间内没有任何文件描述符就绪,select 将返回 0。select 失败是返回-1.如果在sel

大柳_的博客。 1221

select函数(一)

select函数使我们在SVR4和4.3+BSD之下可以执行I/O多路转接,传向select的参数告诉内核: (1) 我们所关心的描述符。 (2) 对于每个描述符我们所关心的条件(是否读一个给定的描述符?是否想写一个给定的 描述符?是否关心一个描述符的异常条件?)。 (3) 希望等待多长时间(可以永远等待,等待一个固定量时间,或完全不等待)。    对select指定读、写和异常条

xp_super的专栏 2215

Windows Socket select函数使用

最近做一个通信服务程序,读取数据时在工作线程中使用Socket 的select方式进行。测试时一直很稳定,并发性能也很好,但是到现场使用时,发现连接的设备,一部分数据通信和读取是正常的,一部分不正常。最后认真的查了select函数的说明,才发现一些问题。 1,函数原型:    int select(int nfds, fd_set* readfds, fd_set* write

刘军的专栏 1万+

WinSocket的select函数的用法(windows套接字比较研究)

总体上来说select函数的作用: 确定一个或多个套接口的状态,本函数用于确定一个或多个套接口的状态,对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息,用fd_set结构来表示一组等待检查的套接口,在调用返回时,这个结构存有满足一定条件的套接口组的子集,并且select()返回满足条件的套接口的数目。 简单来说select用来填充一组可用的socket句柄,当满足下列之

BIGBurning 1万+

ExecuteNonQuery()返回值的几种情况

转:http://blog.sina.com.cn/s/blog_49df2d0b0100bfhb.html  在做一个程序的时候用到ExecuteNonQuery()执行 select,结果总是返回-1。 查到下面文章。 关于ExecuteNonQuery() 方法       最近看到有人问为什么SqlCommand.ExecuteNonQuery()执行Select子句后老是返回-1

X-Weidong’s Blog 2166

Windows socket之Select模型开发

Windowssocketselect模型开发。 套接字select模型是一种比较常用的IO模型。利用该模型可以使Windowssocket应用程序可以同时管理多个套接字。 使用select模型,可以使当执行操作的套接字满足可读可写条件时,给应用程序发送通知。收到这个通知后,应用程序再去调用相应的WindowssocketAPI去执行函数调用。 Select模型的核心是select...

系统运维 645
上一篇: 转:好文章《 Linux 平台下多线程编程的高效开发经验》
下一篇: 关于VC6.0下内存泄露的监测
KWHOK
博客等级 码龄20年 6粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值