什么是阻塞socket,什么是非阻塞socket。对于这个问题,我们要先弄清什么是阻塞/非阻塞。阻塞与非阻塞是对一个文件描述符指定的文件或设备的两种工作方式。 阻塞的意思是指,当试图对该文件描述符进行读写时,如果当时没有东西可读或者暂时不可写,程序就进入等待状态,直到有东西可读或者可写为止。 非阻塞的意思是,当没有东西可读或者不可写时,读写函数就马上返回,而不会等待。

现在来理解什么是阻塞socket,什么是非阻塞socket。每个通过socket()函数创建的socket,本质就是一个文件描述符,所以对该文件描述符的IO操作方式不同,就有了阻塞socket和非阻塞socket。 那是不是说阻塞socket下的所以socket api函数都是阻塞的呢,如果你还不能正确的回答这个问题,说明上面简短的说明并没有让你真正的明白什么是阻塞socket和非阻塞socket。这个问题的答案是否定的,为什么是否定的,因为并不是每个socket的api都会涉及到对文件描述符的IO操作。

这里我列举了,哪些socket api会阻塞:

accept,connect,recv(recvfrom),send(sendto),closesocket,select(poll或epoll)

1)accept在阻塞模式下,没有新连接时,线程会进入睡眠状态;非阻塞模式下,没有新连接时,立即返回WOULDBLOCK错误。

2)connect在阻塞模式下,仅TCP连接建立成功或出错时才返回,分几种具体的情况,这里不再叙述;非阻塞模式下,该函数会立即返回INPROCESS错误(需用select检测该连接是否建立成功)

3)recv/recvfrom/send/sendto很好理解,因为这两类函数读写socket文件描述符的接收/发送缓冲区。

4) select/poll/epoll并不是真正意义上的阻塞,它们的阻塞是由于它们最后一个timeout参数决定的,timeout大于0时,它们会一直等待直到超时才退出(相等于阻塞了吧,^_^),而timeout=-1即永远等待

深入理解阻塞socket和非阻塞socket相关推荐

  1. [Python]再学 socket 之非阻塞 Server

    再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...

  2. UE4 Socket多线程非阻塞通信【1】

    昨日不可追, 今日尤可为.勤奋,炽诚,不忘初心 前面写了一篇有关于虚幻4加载第三方库的博客思前顾后,感觉细节还是有必要拎起来注意下. ue4自带的Fsocket用起来依旧不是那么的顺手,感觉超出了我的 ...

  3. socket的阻塞模式和非阻塞模式(send和recv函数在阻塞和非阻塞模式下的表现)

    socket的阻塞模式和非阻塞模式 无论是Windows还是Linux,默认创建socket都是阻塞模式的 在Linux中,可以再创建socket是直接将它设置为非阻塞模式 int socket (i ...

  4. socket的阻塞模式和非阻塞模式

    文章目录 socket的阻塞模式和非阻塞模式 如何将socket设置为非阻塞模式 send和recv函数在阻塞和非阻塞模式下的表现 非阻塞模式下send和recv函数的返回值总结 阻塞与非阻塞sock ...

  5. UE4 Socket多线程非阻塞通信【2】

    昨日不可追, 今日尤可为.勤奋,炽诚,不忘初心 紧接着第一部分,别说话,勿打断我游离的思绪我们走我们走... 二.消息结构&收发队列 先不急着往下走,先捋一捋,不知道自己要干什么地走下去是一件 ...

  6. Socket 实现非阻塞式多线程文件传输(jpg mov 等各种格式)

    Socket 基础 非阻塞式TCP socket 实现文件传输, 实测 传输5M的jpg , 30M的 NEF(单反原图) 以及 1G以上的mov文件,均正常接收 客户端可多开,服务器多线程实现服务器 ...

  7. Socket 基础 非阻塞式TCP socket,实现文件传输jpg,mov等格式

    Socket 基础 非阻塞式TCP socket 实现文件传输, 实测 传输5M的jpg , 30M的 NEF(单反原图) 以及 1G以上的mov文件,均正常接收 客户端可多开,服务器多线程实现服务器 ...

  8. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...

  9. 分不清楚阻塞IO,非阻塞IO,IO复用?用最贴近生活的例子带你理解这三者的区别!

    文章目录 前言 一.什么是IO 二.阻塞IO模型 三.非阻塞 IO模型 四.IO复用模型 总结 前言 在<Unix网络编程>一书中提到了五种IO模型,分别是:阻塞IO.非阻塞IO.IO复用 ...

最新文章

  1. Android 进阶 Fragment 介绍和使用 (一)
  2. 测试Live Writer
  3. 命令界面:使用Java中的动态API处理Redis
  4. UE4 多线程使用tip
  5. Mr.J--密码强度检测
  6. 返回一个循环数组中最大子数组的和
  7. 95-140-134-源码-transform-KeyedStream的intervalJoin
  8. VS2012 无法启动IIS Express Web服务器的解决方案
  9. Windows 10 Enterprise LTSC MSDN官方纯净版下载
  10. sqlplus配置连接mysql_sqlplus连接远程数据库
  11. SATA学习笔记 14 ---SATA PM
  12. python字典统计排序1_数据分析1_入门Python
  13. android 代码保护 高级混淆
  14. 苹果iWork,看上去很美
  15. OpenCV_contrib配置教程(详细版)
  16. 飞秋登录后好友面板出现乱码情况
  17. Hang Detect 问题分析案例
  18. html加入图片如何自动平铺,html怎么设置背景图片全屏平铺?
  19. 使用DecimalFormat进行数字的格式化
  20. 电子商务B2C的新动态 - 个性化、专业化定制网站已经平民化

热门文章

  1. .Net软件测试化之道 [James D.MCCaffrey]
  2. Android进程优先级和垃圾回收机制
  3. 什么原因?全球许多网络提供商推迟部署IPv6
  4. Python将被加入高考科目?你怎么看?
  5. MKNetWorkKit打印URL
  6. js_加入收藏夹功能
  7. JavaScript学习笔记——underscore操作对象的方法
  8. .jQuery文档分析4-文档处理
  9. 使用LoadRunner测试WMS
  10. [转]SQL语句大全