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——堵塞与非堵塞模式相关推荐

  1. WINDOWS系统服务详解

    1 WINDOWS系统服务详解    --  WINDOWS系统服务详解 <P>1 Alerter 当系统发生故障时向管理员发送错误警报,除非电脑处于局域网,而且配有网络管理员,一 般不需 ...

  2. Windows系统文件详解

    Windows系统文件详解 Windows系统自带了几百个文件,这些文件都是干什么用的?那些文件可以删除,而不影响系统的运行? A ACCESS.CHM Windows帮助文件 ACCSTAT.EXE ...

  3. 计算机服务设置详解,Windows 虚拟内存详解服务器教程 -电脑资料

    window|详解 简单来讲就是文件数据交叉链接的活动文件, 二.虚拟内存的作用内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽.为了 ...

  4. 《Win10 下安装Ubuntu 16.04双系统详解》与《 U盘安装windows系统详解》

    <Win10下安装Ubuntu16.04双系统 >与<U盘安装windows系统详解> 本文由博主经过查阅网上资料后亲自操作实验后记录编写,如存在不对之处请留言以便更正,内容仅 ...

  5. recv/send堵塞和非堵塞

    recv/send堵塞和非堵塞理解 TCP之深入浅出send和recv 需要理解的3个概念 实例详解send() send函数 recv函数 参考: TCP之深入浅出send和recv linux下非 ...

  6. 同步、异步、堵塞、非堵塞和函数调用及I/O之间的组合概念

    在我们工作和学习中,经常会接触到"同步"."异步"."堵塞"和"非堵塞"这些概念,但是并不是每个人都能将它们的关系和区别 ...

  7. IO模式——同步(堵塞、非堵塞)、异步

    为什么IO模式非常重要?由于现代的计算机和操作系统的架构决定了CPU是稀缺资源,大家都要来一起竞争.而IO(特别是网络相关的IO)的速度往往较慢.所以怎样进行IO就有了多种模式,包含同步.异步.堵塞. ...

  8. rsync的介绍及参数详解,配置步骤,工作模式介绍

    rsync的介绍及参数详解,配置步骤,工作模式介绍 rsync是类unix系统下的数据镜像备份工具.它是快速增量备份.全量备份工具. Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主 ...

  9. PE新物种:从投基金到投管理机构,详解GP Stake-投资占股模式

    PE新物种:从投基金到投管理机构,详解GP Stake-投资占股模式 原创: 周晨琦 FOFweekly 昨天 周晨琦 | 作者 朱东霞 | 编辑 引 例 ▼ Bridgepoint将其公司的少数股权 ...

最新文章

  1. 为什么AI感知与人类感知无法直接比较?
  2. jquery获取select选中的值
  3. 企业研发人员配备比例_企业管理人员合理配置比例
  4. Unity3D研究院之Editor下监听Transform变化
  5. 微软自带输入法如何关闭桌面右下角「拼」图标
  6. MFC中的模态对话框与非模态对话框
  7. 学习 | egg.js 中间件和插件
  8. [原创]解决某物流企业二维码打印问题
  9. 润乾报表分组求和_中国式复杂报表:按段分组报表制作对比(润乾 vs 帆软)...
  10. 音频文件转码工具文档 目录 1. 音频文件转码 1 1.1. 简介 1 1.2. 转换命令示例 2 1.3. wav 文件转 16k 16bits 位深的单声道pcm文件 2 1.4. mp3 文件转
  11. C语言学生管理程序输入错误,c语言编程,关于学生管理的程序(急急急)
  12. accuracy_score函数
  13. 计算机二级考试-Java-模拟试题
  14. 仿人人客户端向右滑出式菜单
  15. python编写word_如何使用Python来编辑word
  16. 美通企业日报 | 爱茉莉太平洋与阿里巴巴达成战略合作;新富人群房地产投资比重提升...
  17. 阿里云“无影”云电脑,究竟是不是桌面云?!
  18. 行业竞争分析及发展动向
  19. 再一次100%通过华为中级认证考试,5G网优工程师高薪稳了!
  20. 《遥感原理与应用》总结——遥感图像目视判读

热门文章

  1. 《数学之美》第8章 简单之美--布尔代数和搜索引擎
  2. 科学家揭秘大脑靠“旋转”区分过去和现在,还给了个AI架构设计新思路 | Nature子刊...
  3. 大脑进化追不上社会文化:化石和脱氧核糖核酸证明人类大脑进化比社会慢
  4. CICC科普栏目|颠覆认知!看完这些图,你的世界观还好吗?
  5. 学界 | 清华AMiner团队发布53页计算机图形学研究报告
  6. 打破国外垄断,我国拿下一项“制芯”关键技术
  7. ACM公布2017年图灵奖,大卫·帕特森和约翰·轩尼诗获奖
  8. 文武双全,AI 女神们的修炼手册!
  9. 我为什么强烈反对程序员加班?
  10. 12306 背后的技术大牛:我不跟人拼智商,我就跟他们拼狠!