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. MMDetection V2.0发布!速度精度全面提升,现有检测框架最优
  2. AI芯片评测如何与时俱进?地平线提出全新MAPS评测方法,帮助用户理解AI芯片性能...
  3. 今日头条 Go 建千亿级微服务的实践
  4. python制作聊天机器人原理_用 Python 来做一个聊天机器人吧!(一)
  5. 使用 Redis的SETNX命令实现分布式锁
  6. 力扣836.矩形重叠
  7. 初学者python笔记(面向对象编程、类与对象)
  8. 专题训练——[kuangbin带你飞]最短路练习
  9. 201632位matlab下载_Matlab 2016a下载
  10. java安装包_Java6 Update
  11. 中兴力维动环监控接线图_中兴力维动环监控与智能管理解决方案,让运维管理更高效!...
  12. 计算机网络释疑与解答第六版 pdf,计算机网络释疑与习题解答第5版.pdf
  13. 蓝牙耳机什么牌子好_盘点千元内最好的蓝牙耳机
  14. poj1637(混合图判欧拉回路)
  15. web前端学习路线(含20个真实web开发项目集合)
  16. 绝地求生国际服苹果版服务器维修,绝地求生国际服ios手机版
  17. python爬虫登录微博_为爬虫获取登录cookies: 使用Charles和requests模拟微博登录
  18. 提高计算机网络可靠性的对策,提高计算机网络可靠性的方法研究
  19. 安装MAC系统必备工具
  20. dnspod域名解析设置

热门文章

  1. 深度丨走向人工智能时代,百度的延承和蜕变
  2. from __future__ import absolute_import, division, print_function
  3. markdown设置字体颜色大小、目录、列举和横线
  4. 科技热点思考:元宇宙发展及其风险挑战
  5. 用研究新范式破解生命科学难题
  6. “嫦娥上月球挖土”!打破尘封44年的人类历史,中国航天实现“五个首次”...
  7. ​台媒:台积电2nm制程获重大突破
  8. 全球43亿IPv4地址正式耗尽,IPv6才是物联网的菜
  9. 【科普】AI的分类与演进
  10. Gartner预测:2019年七大AI科技趋势,百万行业将颠覆!