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将其公司的少数股权 ...
最新文章
- python定义字符串数组_从字符串数组(或元组)在Python中创建动态sql“ in list”子句的“最佳”方法是什么?...
- 重装mysql遇到的问题
- OpenFOAM各版本说明介绍
- Websocket--- long loop--ajax轮询
- 如何在 Windows Server 中配置权威时间服务器
- 亚马逊echo中国使用_如何使用亚马逊的主要照片备份所有照片
- 大数据集群搭建之节点的网络配置过程(二)
- BIND9之dig工具的使用方法
- 苹果失策?新iPhone捆绑Apple TV+或会致硬件利润率下滑
- SQL中 NVL()函数的使用
- 【linux笔记】CentOs 7配置网络IP
- abb变频器580系列改中文,ACS580变频器参数设置.pdf
- 数控编程加工中心注意事项有哪些,你知道吗
- MTK_核心功能模块内部结构框图
- [ZJOI2009]狼和羊的故事 题解
- mysql 替换所有字母,mysql如何替换掉字母
- 职场菜鸟如何更好的提升自己?
- SpringBoot整合——阿里云对象存储(OSS)
- 浙江公务员考试申论指导作答的思路与方法
- Android知识点原理总结
热门文章
- 我国科学家首次揭示“时空”记忆在猕猴大脑中表征的几何结构
- 新型人工突触可用于高度扩展的类脑计算
- 一文读懂人工智能产业最新发展趋势
- 特斯拉Autopilot事故频发,真正意义上自动驾驶还要多久问世?
- 机载雷达发展简史:从蝙蝠到机载相控阵
- 【工业4.0】深度报告:独家解密工业4.0真正图谋?跟踪软件帝国的十年
- AI在行动:改变科学界的人工智能
- 苹果员工“神操作”:自建网站揭露公司性骚扰和歧视事件
- “35 岁才是一个程序员成熟的开始!”
- 雷军的“初恋”回来了