MSG_WAITALL和文件描述符的阻塞模式
来源:互联网 发布:豆瓣交友软件 编辑:程序博客网 时间:2024/06/16 11:41
recv函数可以设置一些标志,这也是recv和read的不同之处。
其中有一个MSG_WAITALL标志,如果recv设置了这个标志,当没有收到请求的字节数时,recv函数会阻塞。然而,当被信号打断,或者发生了错误,或者断开了连接,或者接收到的下一个数据和已经接收的数据的数据类型不一致时,recv函数即使没有收到请求的字节数,也会返回,返回一个错误。
由此可见,设置了MSG_WAITALL标志的recv函数,类似于前文的readn函数,不同的是readn函数对被信号打断的情况进行了处理,而MSG_WAITALL则没有进行处理。
既然该标志可以使recv函数阻塞,那这和文件描述符的阻塞模式相比,有什么区别呢?
如果文件描述符处于阻塞模式,执行recv操作时,如果接收缓冲区没有数据,会一直阻塞,直到接收缓冲区有数据。然而,设置了MSG_WAITALL的recv,即使缓冲区有数据,只要数据字节数小于请求字节数,recv就会阻塞。
可见,MSG_WAITALL和文件描述符的阻塞模式,发生阻塞的是两个阶段。
阅读全文
0 0
- MSG_WAITALL和文件描述符的阻塞模式
- 流和文件描述符的关系
- Linux下文件描述符和文件流的转换
- Linux中文件指针和文件描述符的区
- 文件描述符和文件流之间的转换
- 文件描述符和文件指针的区别
- 文件描述符和文件指针的区别
- 文件描述符和文件指针的区别
- fork文件描述符和文件指针的区别
- 文件描述符和文件指针的区别
- 文件流指针和文件描述符的区别
- 文件描述符和文件指针的区别
- 文件描述符和文件指针的区别
- 文件描述符和文件指针的区别
- 文件描述符和文件流之间的转换
- 文件描述符和文件指针的区别
- 文件描述符和文件流之间的转换
- Shell下的通配符、特殊符号和文件描述符
- BZOJ3706 反色刷
- 2017年10月站立会议旁观笔记
- html angular购物车全选+全删+批量删除+单独删除+模糊查找+筛选价格区间
- MySql的flush用法
- 教你从零开始搭建一款前端脚手架工具
- MSG_WAITALL和文件描述符的阻塞模式
- 什么是代码优先(Code First)
- 32、C#里面超链接标签的使用
- 根据屏幕宽高按指定比例设置控件的宽高
- PHP上传大文件的注意事项
- Android <activity-alias> 的用法解析
- 意料之外也是情理之中,我的自由职业之旅
- UNITY3D 5.0 修改文字内容
- 从今天开始写博客记录每天学习进度--第一天