Windows Sockets2 详解2——堵塞与非堵塞模式
Socket有两种调用模式:堵塞与非堵塞模式。
顾名思义,堵塞模式就是线程在调用windows socket API后,被挂起直到该函数执行完毕。在(1)中我们知道socket函数调用并不是立即完成的,例如Accept函数,只有当有连接到达时才会执行结束。至于windows是通过什么方式将线程挂起又唤醒的,用户模式同步也好,内核模式同步也好,我们程序员不必关心,给我们程序员的错觉就是程序在以一种同步的方式执行。这种方式编写程序很轻松,但是白白浪费了一个线程,我们程序中的其他逻辑不能得到执行了,除非另起一个线程。
非堵塞模式正好相反,线程在调用Accept函数后,可以继续执行后面的逻辑,线程不会被挂起。 那么我们如何知道函数调用结束了呢?如果有连接到达了,我们的程序怎么知道呢?windows是怎样通知我们的程序的呢?所有麻烦都落到了我们程序员头上。最简单的方法循环执行Accept,检查是否有连接到达,这样我们的线程也不会被挂起。还可以通过线程同步来做,最常用的通过事件。
那么如何设置socket的堵塞和非堵塞模式呢?答案是调用ioctlsocket
int setNonblock( int fd )
{
unsigned long nonblocking = 1;
ioctlsocket( fd, FIONBIO, (unsigned long*) &nonblocking );
return 0;
}
//设置堵塞模式
int setBlock( int fd )
{
unsigned long nonblocking = 0;
ioctlsocket( fd, FIONBIO, (unsigned long*) &nonblocking );
return 0;
}
当然实际情况没有这么简单,例如如果调用了WSAAsyncSelect or WSAEventSelect 函数后,将不能再将socket对象设为堵塞模式,程序将会得到WSAEINVAL错误
后面的教程我们将分别探讨这两种模式。
有兴趣的可以看一下《精通Windows Sockets网络开发--基于C++实现》这本书,我没看过,不过听说不错,只可惜没有电子版,我只是得到了书中的例子代码。但对一些概念不是很清楚,于是翻阅msdn(英文的,真受不了),加上自己的理解,就有了这系列文章。以梳理所学,以回馈园友。
转载于:https://www.cnblogs.com/hjblog/archive/2010/11/16/1877938.html
Windows Sockets2 详解2——堵塞与非堵塞模式相关推荐
- WINDOWS系统服务详解
1 WINDOWS系统服务详解 -- WINDOWS系统服务详解 <P>1 Alerter 当系统发生故障时向管理员发送错误警报,除非电脑处于局域网,而且配有网络管理员,一 般不需 ...
- Windows系统文件详解
Windows系统文件详解 Windows系统自带了几百个文件,这些文件都是干什么用的?那些文件可以删除,而不影响系统的运行? A ACCESS.CHM Windows帮助文件 ACCSTAT.EXE ...
- 计算机服务设置详解,Windows 虚拟内存详解服务器教程 -电脑资料
window|详解 简单来讲就是文件数据交叉链接的活动文件, 二.虚拟内存的作用内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽.为了 ...
- 《Win10 下安装Ubuntu 16.04双系统详解》与《 U盘安装windows系统详解》
<Win10下安装Ubuntu16.04双系统 >与<U盘安装windows系统详解> 本文由博主经过查阅网上资料后亲自操作实验后记录编写,如存在不对之处请留言以便更正,内容仅 ...
- recv/send堵塞和非堵塞
recv/send堵塞和非堵塞理解 TCP之深入浅出send和recv 需要理解的3个概念 实例详解send() send函数 recv函数 参考: TCP之深入浅出send和recv linux下非 ...
- 同步、异步、堵塞、非堵塞和函数调用及I/O之间的组合概念
在我们工作和学习中,经常会接触到"同步"."异步"."堵塞"和"非堵塞"这些概念,但是并不是每个人都能将它们的关系和区别 ...
- IO模式——同步(堵塞、非堵塞)、异步
为什么IO模式非常重要?由于现代的计算机和操作系统的架构决定了CPU是稀缺资源,大家都要来一起竞争.而IO(特别是网络相关的IO)的速度往往较慢.所以怎样进行IO就有了多种模式,包含同步.异步.堵塞. ...
- rsync的介绍及参数详解,配置步骤,工作模式介绍
rsync的介绍及参数详解,配置步骤,工作模式介绍 rsync是类unix系统下的数据镜像备份工具.它是快速增量备份.全量备份工具. Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主 ...
- PE新物种:从投基金到投管理机构,详解GP Stake-投资占股模式
PE新物种:从投基金到投管理机构,详解GP Stake-投资占股模式 原创: 周晨琦 FOFweekly 昨天 周晨琦 | 作者 朱东霞 | 编辑 引 例 ▼ Bridgepoint将其公司的少数股权 ...
最新文章
- MMDetection V2.0发布!速度精度全面提升,现有检测框架最优
- AI芯片评测如何与时俱进?地平线提出全新MAPS评测方法,帮助用户理解AI芯片性能...
- 今日头条 Go 建千亿级微服务的实践
- python制作聊天机器人原理_用 Python 来做一个聊天机器人吧!(一)
- 使用 Redis的SETNX命令实现分布式锁
- 力扣836.矩形重叠
- 初学者python笔记(面向对象编程、类与对象)
- 专题训练——[kuangbin带你飞]最短路练习
- 201632位matlab下载_Matlab 2016a下载
- java安装包_Java6 Update
- 中兴力维动环监控接线图_中兴力维动环监控与智能管理解决方案,让运维管理更高效!...
- 计算机网络释疑与解答第六版 pdf,计算机网络释疑与习题解答第5版.pdf
- 蓝牙耳机什么牌子好_盘点千元内最好的蓝牙耳机
- poj1637(混合图判欧拉回路)
- web前端学习路线(含20个真实web开发项目集合)
- 绝地求生国际服苹果版服务器维修,绝地求生国际服ios手机版
- python爬虫登录微博_为爬虫获取登录cookies: 使用Charles和requests模拟微博登录
- 提高计算机网络可靠性的对策,提高计算机网络可靠性的方法研究
- 安装MAC系统必备工具
- dnspod域名解析设置
热门文章
- 深度丨走向人工智能时代,百度的延承和蜕变
- from __future__ import absolute_import, division, print_function
- markdown设置字体颜色大小、目录、列举和横线
- 科技热点思考:元宇宙发展及其风险挑战
- 用研究新范式破解生命科学难题
- “嫦娥上月球挖土”!打破尘封44年的人类历史,中国航天实现“五个首次”...
- ​台媒:台积电2nm制程获重大突破
- 全球43亿IPv4地址正式耗尽,IPv6才是物联网的菜
- 【科普】AI的分类与演进
- Gartner预测:2019年七大AI科技趋势,百万行业将颠覆!