select阻塞与非阻塞的含义
来源:互联网 发布:适用于mac电脑壁纸 编辑:程序博客网 时间:2024/04/20 18:37
一个套接字阻塞或者不阻塞,select就在那里,它可以针对这2种套接字使用,对任何一种套接字的轮询检测,超时时间都是有效的,区别就在于:
当select完毕,认为该套接字可读时,
1 .阻塞的套接字,会让read阻塞,直到读到所需要的所有字节;
2 .非阻塞的套接字,会让read读完fd中的数据后就返回,但如果原本你要求读10个数据,这时只读了8个数据,如果你不再次使用select来判断它是否可读,而是直接read,很可能返回EAGAIN或=EWOULDBLOCK(BSD风格) ,
此错误由在非阻塞套接字上不能立即完成的操作返回,例如,当套接字上没有排队数据可读时调用了recv()函数。此错误不是严重错误,相应操作应该稍后重试。对于在非阻塞 SOCK_STREAM套接字上调用connect()函数来说,报告EWOULDBLOCK是正常的,因为建立一个连接必须花费一些时间。
EWOULDBLOCK的意思是如果你不把socket设成非阻塞(即阻塞)模式时,这个读操作将阻塞,也就是说数据还未准备好(但系统知道数据来了,所以select告诉你那个socket可读)。使用非阻塞模式做I/O操作的细心的人会检查errno是不是EAGAIN、EWOULDBLOCK、EINTR,如果是就应该重读,一般是用循环。如果你不是一定要用非阻塞就不要设成这样,这就是为什么系统的默认模式是阻塞。
0 0
- select阻塞与非阻塞的含义
- select与阻塞和非阻塞
- linux select阻塞非阻塞的使用
- IO阻塞非阻塞. select
- IO阻塞非阻塞. select
- 阻塞 非阻塞 select epoll
- 阻塞与非阻塞
- 阻塞与非阻塞
- 阻塞与非阻塞
- 阻塞 与 非阻塞
- 阻塞与非阻塞
- 阻塞 与 非阻塞
- 阻塞与非阻塞
- 阻塞与非阻塞
- 阻塞与非阻塞
- 阻塞与非阻塞
- select函数与阻塞socket/非阻塞socket没有半毛钱的关系!------select永远阻塞,直到xxx
- 阻塞与非阻塞的区别
- Android4.4.4 SDK 编译
- Nginx 安装与配置
- 百度静态资源公共库
- require() 源码解读
- PART III 硬件层 Chapter 4 门和电路
- select阻塞与非阻塞的含义
- docker映射本地代码到容器中
- solr4.0环境搭建
- 驱动之module_init/module_exit
- CDH Gateway docker实战
- iOS如何判断一个日期是否是今天,昨天,前天?
- maven项目依赖详细步骤
- Excel数据导入导DataTable 方法总结
- 【菜鸟小屁的成长日记】之<ElasticSearch中的TimeStamp时间戳>篇