socket阻塞与非阻塞情况下的recv、send、read、write返回值
2016-07-25 22:23
302 查看
recv:
阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,
特别:非阻塞模式下返回 值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况 下认为连接是正常的,继续接收。
只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要 循环读取。
write:
阻塞与非阻塞write返回值没有区分,都是 <0:出错,=0:连接关闭,>0发送数据大小,
特别:非阻塞模式下返回值 <0时并且 (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的, 继续发送。
只是阻塞模式下write会阻塞着发送数据,非阻塞模式下如果暂时无法发送数据会返回,不会阻塞着 write,因此需要循环发送。
read:
阻塞与非阻塞read返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,
特别:非阻塞模式下返回 值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况 下认为连接是正常的,继续接收。
只是阻塞模式下read会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要 循环读取。
send:
阻塞与非阻塞send返回值没有区分,都是 <0:出错,=0:连接关闭,>0发送数据大小,
特别:非阻塞模式下返回值 <0时并且 (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的, 继续发送。
只是阻塞模式下send会阻塞着发送数据,非阻塞模式下如果暂时无法发送数据会返回,不会阻塞着 send,因此需要循环发送。
相关文章推荐
- 算法4开坑
- 剑指offer 59题 【树】对称的二叉树
- cocos2dx学习之路----第八篇(初识触摸机制中的单点触摸)
- Cats Transport Codeforces 311B 斜率优化
- android-Notification.Style
- 玩游戏也是有心得的!——培训的第一天
- POJ 1458 Common Subsequence
- **MYSQL** 系列十一
- 基于VanlOS 10 CMP Red Whale 博客实践
- linux可执行文件的t权限
- SQL 中的左连接和右连接
- 打开虚拟机提示内部错误,并且进入虚拟机提示无法获取文件句柄,导致开启虚拟机失败
- SQL基本语法
- POJ 3041 Asteroids 二分图最小点覆盖
- android-Notification.InboxStyle
- Python中的分片
- HDU 5729 - Rigid Frameworks
- JavaScript事件机制——细思极恐
- **MYSQL** 系列十
- ODS 和 数据仓库