Winsock2中WSAAsynSelect()模型各种事件的触发条件

Winsock控件的属性、方法、事件 立即下载

转自:http://dev.youkuaiyun.com/article/39/39132.shtm

 

使用WSAAsynSelect()模型的关键是要搞清楚各种事件的触发条件,不然会造成读或写数据混乱。
这些事件的触发条件同样适用于CAsyncSocket

=======================
[1]FD_READ事件触发条件:
1.在数据到达socket后,并且从来没有触发过FD_READ(也就是最开始的阶段)
2.在数据到达socket后,并且前一个recv()调用后
3.调用recv()后,缓冲区还有未读完的数据  系统会将它们加入消息队列中去

第3点过程如下:
1.100 bytes 数据到达,winsock2发出FD_READ
2.程序用recv()只读入50 bytes,还剩下50 bytes
3.winsock2继续发出FD_READ消息

recv()返回WSAEWOULDBLOCK的情况:
1.有数据到达,FD_READ触发,该消息加入程序的消息队列
2.在还没处理该消息前,程序就把数据recv()了
3.等到处理该FD_READ消息时,程序调用recv()就会返回WSAEWOULDBLOCK(因为数据在这之前就recv()了)

注意:
1.winsock2发出一个FD_READ后,如果程序没有用recv(),即使还有数据没接收FD_READ也不会再触发另一个FD_READ,要等到recv()调用后FD_READ才会发出。
2. 对一个FD_READ多次recv()的情形:如果程序对一个FD_READ多次recv()将会造成触发多个空的FD_READ,所以程序在第2次 recv()前要关掉FD_READ(可以使用WSAAsynSelect关掉FD_READ),然后再多次recv()。
3.recv()返回WSAECONNABORTED,WSAECONNRESET...等消息,可以不做任何处理,可以等到FD_CLOSE事件触发时再处理

 

一下是我对第三点的理解

 

 

 

=====================
[2]FD_ACCEPT事件触发条件:
1.当有请求建立连接,并且从来没有触发过FD_ACCEPT(也就是最开始的阶段)
2.当有请求建立连接,并且前一个accept()调用后

注意:当FD_ACCEPT触发后,如果程序没有调用accept(),即使还有建立连接的请求FD_ACCEPT也不会触发,要直到accept()调用后

========================
[3]FD_WRITE事件触发条件:
1.第一次connect()或accept()后(即连接建立后)
2.调用send()返回WSAEWOULDBLOCK,并且直到发送缓冲区准备好(为空)后

注意:当前一次调用send()没有返回WSAEWOULDBLOCK时,如果缓冲区准备好了,也不会触发FD_WRITE的

========================
[4]FD_CLOSE事件触发条件:自己或对端中断连接后
注意:closesocket()调用后FD_CLOSE不会触发

========================
[5]FD_CONNECT事件触发条件:调用了connect(),并且连接建立后。

详细参考MSDN

WSAAsynSelect 对WSAAsynSelect基本使用的实现,可以学习下该模型的基本使用 立即下载

相关推荐

1.3、云计算HCIP融合存储产品及部署

目标:描述Oceanstor V3系列存储产品系统组成及产品定位 描述Oceanstor V3硬件结构及软件架构 掌握存储系统与主机系统之间的连接 一、存储型号 低端型存储:Oceanstor 2200 2600 2800 V3/V5 终端型存储:Oceanstor 5300 5500 5600 5800 6800 V3/V5 高端型存储:Oceanstor 18000 二、Oceanstor V3系列存储系统定位 OceanStor V3系列存储系统是华为根据存储产品应用现状和存储

weixin_43666279的博客 1652

Java Scoket 错误分析

<br />环境<br />客户端 Redhat Enterprise Linux 9<br />服务端 Redhat Enterprise Linux 9<br />JDK   Javase5Update4<br /><br />场景<br />客户端每个连接池有一个keep-live的时间来控制该连接池中每一个连接的空闲生存期。<br />服务端也有一个SocketTimeOut时间来控制每一个连接的空闲生存期。<br /><br />Socket Exception<br />1)java.net.S

windgoogle的专栏 1593

零基础教程:用Python给试卷照片自动切题(有道OCR+PIL完整流程)

本文为零基础用户提供了一套完整的Python自动化切题方案。通过调用有道OCR API识别试卷照片中的题目坐标,并利用PIL库进行精准裁剪,将杂乱的试卷图片自动分割为独立的题目图像。教程详细涵盖了环境搭建、图像预处理、API调用、坐标解析与批量处理全流程,帮助教育工作者和技术爱好者高效处理大量试卷,实现工作流程自动化。

grpc6streamer的博客 1172

糖儿飞教你学C++ Socket网络编程——18. MFC WinSock版的TCP通信程序

在4.2节中使用Win32 API方法制作了一个TCP异步通信的程序,本节将4.2节的程序用MFC框架重新编写,改写后程序的界面如图6-15所示,功能与4.2节的程序完全相同。 图6-15 MFC版TCP异步通信程序的界面 6.3.1 服务器端程序的制作 1)创建一个MFC工程:新建工程,选择“MFC APPWizard(exe)”,输入工程名(如TCPzdy),单击“下一步”,在步骤...

3706

智能安防摄像头埋点实践:用户行为与设备状态的闭环监控(含AI事件)

智能安防摄像头埋点闭环体系设计及应用实践 摘要: 本文系统阐述了智能安防摄像头埋点闭环体系的设计与实践。首先分析了传统埋点的不足及闭环埋点的价值,提出由用户行为埋点、设备状态埋点和AI事件埋点构成的三维埋点体系框架。详细介绍了闭环监控的四大流程:数据采集、汇聚清洗、分析建模和智能决策。通过误报优化、个性化策略等案例展示了AI事件闭环的实际应用价值,并探讨了隐私合规、性能优化等关键挑战的解决思路。最后展望了端侧AI增强、预测型埋点等未来发展趋势。该体系实现了从数据采集到业务决策的完整闭环,有效提升了AI模型性

专注智能硬件软硬件产品经理成长与实战,分享从需求定义到量产落地的真实日记。涵盖IoT趋势洞察、研发协作经验、产品方法论与工具箱,用轻松有趣的“汪式”视角,陪伴产品经理成长、避坑与升级。 1046

网络安全 —— 实验(基于华为eNSP模拟器)

8. 实验八 —— 通过路由的远程管理(基于实验七的基础配置)8. 实验八 —— 通过路由的远程管理(基于实验七的基础配置)6. 实验六 —— 交换机的远程控制(直接控制和间接控制)6. 实验六 —— 交换机的远程控制(直接控制和间接控制)5. 实验五 —— 将交换机作为PC端通过交换机相连。5. 实验五 —— 将交换机作为PC端通过交换机相连。4. 实验四 —— 两个PC机通过两台交换机相连。2. 实验二 —— 两个PC机通过交换机相连。2. 实验二 —— 两个PC机通过交换机相连。

这个家伙看起来很懒,只想把你留下来哦 9337

WSAAsynSelect()模型 FD_READ事件中recv()接收数据的返回值讨论

<br />使用WSAAsynSelect()模型,在FD_READ事件的时候recv()的返回值讨论? <br /><br />C/C++ codedo{ int nRecvStat = recv( m_sockID, pchBuf, nBufLen, 0 ); int nErrorCode = ::WSAGetLastError();}while(nRecvStat > 0); <br />nRecvStat > 0 自然就是实际从SOCKET缓冲区中读出的数据,现在我们讨论nRecvSta

ldd909的专栏 3270

使用Android GPS api 实现一个轨迹记录的小功能

引入 市场上的跑步软件已经是非常多了,如咕咚和悦跑圈还有其他,很多大厂也在涉足这个方面。而最简单的运动跑步,最近几年也因简单,不限场地,运动效果出众备受大众喜欢。 我的这篇文章的内容很多也是从网上学习其他的博客内容,外加利用android自身的提供的api实现的,希望能对有这方面需求的朋友有所帮助。 介绍 先上两张图,界面比较丑,不过一些数据基本都有了,这个图片是临时要用截取的,所以轨迹线很短,之前

尝试着去了解代码 1万+

Winsock2中WSAAsynSelect()模型各种事件的触发条件[转]

Winsock2中WSAAsynSelect()模型各种事件的触发条件[转] 使用WSAAsynSelect()模型的关键是要搞清楚各种事件的触发条件,不然会造成读或写数据混乱。   这些事件的触发条件同样适用于CAsyncSocket   =======================   [1]FD_READ事件触发条件:   1.在数据到达socket后,并且从来没有触发过FD

X-Weidong’s Blog 1095

反应动力学仿真软件:Kintecus_(12).高级功能与技巧

Kintecus允许用户自定义复杂的反应方程,包括非线性反应和多相反应。通过自定义反应方程,用户可以更准确地描述实际反应系统。多尺度仿真是指在同一模型中同时考虑不同时间和空间尺度的反应过程。Kintecus提供了工具来处理从微观分子动力学到宏观反应动力学的多尺度仿真。通过本节的学习,您已经掌握了Kintecus的高级功能与技巧,包括复杂反应网络的构建、参数优化与敏感性分析、自定义反应机制、多尺度仿真、并行计算与批处理,以及数据可视化与后处理。

kkchenjj的博客 1047

【WorkBuddy专栏15】灵感被折叠到「更多」里,真的不重要了吗?——一个「被低估」功能的当下价值与未来演变

【WorkBuddy专栏15】灵感被折叠到「更多」里,真的不重要了吗?——一个「被低估」功能的当下价值与未来演变

AI人人懂 958

微信公众号 - 最新详细实现H5网页接入微信支付功能,开发移动端、PC端网站集成使用微信支付流程及示例代码,公众号网页利用JS-SDK/JSAPI/H5支付授权唤起微信支付,可脱离微信环境支付或内置浏

微信公众号,微信支付,网页,移动端,h5,扫码支付,二维码付款,手机网页,电脑pc网页生成支付二维码,js-sdk,jsapi,外部浏览器调起微信支付,脱离微信环境,在微信内置浏览器如何进行微信支付,前端H5微信支付,web网站,vue2,vue3,nuxt2,nuxt3,jquery,微信公众号h5支付流程,如何实现,怎么做,回调报错,redirect_uri参数错误,必须部署才能调试吗,怎么不打包发布就能在本机测试,微信H5支付能力,uniapp微信支付,h5页面调起支付,支付没反应,无效,失败,H5页

🏆 前端领域优质创作者 6101

winsock IO模型WSAAsynSelect

WSAAsynSelect模型: WSAAsynSelect模型也是一个常用的异步I/O模型。应用程序可以在一个套接字上接收以 WINDOWS消息为基础的网络事件通知。该模型的实现方法是通过调用WSAAsynSelect函 数 自动将套接字设置为非阻塞模式,并向WINDOWS注册一个或多个网络时间,并提供一 个通知时使用的窗口句柄。当注册的事件发生时,对应的窗口将收到一个基于消息的通知。 int...

weixin_30929011的博客 238

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

winsocket笔记01

FD_WRITE触发条件: 1.client 通过connect(WSAConnect)首次和server建立连接时,在client端会触发FD_WRITE事件 2.server通过accept(WSAAccept)接受client连接请求时,在server端会触发FD_WRITE事件 3.send(WSASend)/sendto(WSASendTo)发送失败返回WSAEWOULDBLOCK

woaicide的专栏 322

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

WSAAsyncSelect之win32示例模型

WinSock是Windows提供的包含了一系列网络编程接口的套接字程序库。在这篇文章中,我们将介绍如何把它的非阻塞模式引入到应用程序中。 阻塞模式WinSock.下述伪代码给出了阻塞模式下WinSock的使用方式。 //服务器 WSAStartup(); SOCKET server = socket(); bind(server); listen(server); SOCKET

山水人间。 796

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Windows IO模型-WSAAsynSelect模型(异步阻塞模型)

WSAAsyncSelect-异步选择模型(异步阻塞模型) 异步选择(WSAAsyncSelect)模型:属于被动通知,基于消息机制,需要向Windows注册消息,当对应的网络事件发生时,向指定窗口发送指定消息。 缺点:(1)消息不安全,而且会慢,消息的过程比较复杂。(2)基于窗口,必须要有窗口,所以平台有限制。    1、向windows注册网络事件 █ WSAAsyncSelect

xiaobangkuaipao的博客 1364

解决:WSASend(send)失败,错误ID为WSAECONNABORTED(10053)

socket网络通信时,调用WSASend或send函数时返回值错误,lasterror为WSAECONNABORTED (10053),错误信息为:Software caused connection abort.   问题所在: 远程主机主动关闭了socket连接,而本地没有关闭且在继续send,就会导致此类问题 ...

玄冬Wong 3253
上一篇: 关于GetDIBits的使用 抓狂搞了1整天 备注待查
下一篇: c++模拟MFC中运行时类型识别(RTTI)(Run-Time Type Identification)
cmdhack
博客等级 码龄19年 20粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值