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. python定义字符串数组_从字符串数组(或元组)在Python中创建动态sql“ in list”子句的“最佳”方法是什么?...
  2. 重装mysql遇到的问题
  3. OpenFOAM各版本说明介绍
  4. Websocket--- long loop--ajax轮询
  5. 如何在 Windows Server 中配置权威时间服务器
  6. 亚马逊echo中国使用_如何使用亚马逊的主要照片备份所有照片
  7. 大数据集群搭建之节点的网络配置过程(二)
  8. BIND9之dig工具的使用方法
  9. 苹果失策?新iPhone捆绑Apple TV+或会致硬件利润率下滑
  10. SQL中 NVL()函数的使用
  11. 【linux笔记】CentOs 7配置网络IP
  12. abb变频器580系列改中文,ACS580变频器参数设置.pdf
  13. 数控编程加工中心注意事项有哪些,你知道吗
  14. MTK_核心功能模块内部结构框图
  15. [ZJOI2009]狼和羊的故事 题解
  16. mysql 替换所有字母,mysql如何替换掉字母
  17. 职场菜鸟如何更好的提升自己?
  18. SpringBoot整合——阿里云对象存储(OSS)
  19. 浙江公务员考试申论指导作答的思路与方法
  20. Android知识点原理总结

热门文章

  1. 我国科学家首次揭示“时空”记忆在猕猴大脑中表征的几何结构
  2. 新型人工突触可用于高度扩展的类脑计算
  3. 一文读懂人工智能产业最新发展趋势
  4. 特斯拉Autopilot事故频发,真正意义上自动驾驶还要多久问世?
  5. 机载雷达发展简史:从蝙蝠到机载相控阵
  6. 【工业4.0】深度报告:独家解密工业4.0真正图谋?跟踪软件帝国的十年
  7. AI在行动:改变科学界的人工智能
  8. 苹果员工“神操作”:自建网站揭露公司性骚扰和歧视事件
  9. “35 岁才是一个程序员成熟的开始!”
  10. 雷军的“初恋”回来了