EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接

2023-05-16

EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接 EWOULDBLOCK用于非阻塞模式,不需要重新读或者写

EINTR指操作被中断唤醒,需要重新读/写

在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。
从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果你连续做read操作而没有数据可读。此时程序不会阻塞起来等待数据准备就绪返 回,read函数会返回一个错误EAGAIN,提示你的应用程序现在没有数据可读请稍后再试。
又例如,当一个系统调用(比如fork)因为没有足够的资源(比如虚拟内存)而执行失败,返回EAGAIN提示其再调用一次(也许下次就能成功)。
Linux - 非阻塞socket编程处理EAGAIN错误
在linux进行非阻塞的socket接收数据时经常出现Resource temporarily unavailable,errno代码为11(EAGAIN),这是什么意思?
这表明你在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,这个错误不会破坏socket的同步,不用管它,下次循环接着recv就可以。 对非阻塞socket而言,EAGAIN不是一种错误。在VxWorks和Windows上,EAGAIN的名字叫做EWOULDBLOCK。
另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。

最后,如果recv的返回值为0,那表明连接已经断开,我们的接收操作也应该结束。


另外附一下几个问题:

1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有 区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 <0:出错,=0:连接关闭,>0接收到数据大小,特别:返回 值 <0时并且(errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况 下认为连接是正常的,继续接收。只是阻塞模式下recv会阻塞着接收数据,非阻塞模式下如果没有数据会返回,不会阻塞着读,因此需要 循环读取



2、阻塞模式与非阻塞模式下write的返回值各代表什么意思? 有没有区别?

阻塞与非阻塞write返回值没有区分,都是 <0:出错,=0:连接关闭,>0发送数据大小,特别:返回值 <0时并且 (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)的情况下认为连接是正常的, 继续发送。只是阻塞模式下write会阻塞着发送数据,非阻塞模式下如果暂时无法发送数据会返回,不会阻塞着 write,因此需要循环发送



3、阻塞模式下read返回 值 < 0 && errno != EINTR && errno != EWOULDBLOCK & amp;& errno != EAGAIN时,连接异常,需要关闭,read返回值 < 0 && amp; (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)时表示没有数据, 需要继续接收,如果返回值大于0表示接送到数据。 

非阻塞模式下read返回值 < 0表示没有数据,= 0表示 连接断开,> 0表示接收到数据。 

这2种模式下的返回值是不是这么理解,有没有跟详细的理解或跟准确的 说明? 


4、阻塞模式与非阻塞模式下是否send返回 值 < 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) 表示暂时发送失败,需要重试,如果send返回值 <= 0, && errno != EINTR && amp; errno != EWOULDBLOCK && errno != EAGAIN时,连接异常,需要关闭,如果send返回 值 > 0则表示发送了数据?send的返回值是否这么理解,阻塞模式与非阻塞模式下send返回值=0是否都是发送失败,还是那个模式下表示暂时 不可发送,需要 重发?


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接 的相关文章

随机推荐

  • OpenCV笔记.1 - OpenCV的编译和安装

    OpenCV的编译和安装 想要使用OpenCV进行图像的处理和开发 xff0c 就需要先对OpenCV库进行编译 虽然在Windows下已经有了现成的OpenCV库 xff0c 但是由于官方提供的库缺少一些关键的功能 xff08 例如Ope
  • Git中stash和stage的差别

    对于初学者来说 xff0c git中stash和stage两个命令的单词有些相似 xff0c 有可能会弄混 其实二者是两个完全不同的概念 1 stash是git中的一个命令 git stash的作用是把工作区 必须是工作区中已经被git追踪
  • 用matlab和RTB做二连杆机械臂动力学建模

    文章目录 写在前面二连杆机械臂RTB建模仿真与验证源代码 写在前面 本文使用的工具为matlab以及Peter Corke的RTB Robotics Toolbox 基于RTB 10 3 1版本 xff0c 我写了RTE Robotics
  • 机械臂协同搬运中的阻抗控制

    文章目录 阻抗模型物体阻抗分布阻抗Matlab和RTB仿真物体阻抗分布阻抗 源代码 阻抗模型 阻抗控制的目的是将原有物体动力学修正为我们期望动力学 假设有一个弹簧 xff0c 通过阻抗控制 xff0c 可以使得它的刚度降低 xff0c 实际
  • MATLAB App Designer生成独立GUI(可执行exe)并添加依赖项

    文章目录 写在前面生成步骤设置编译器编写GUI生成exe 常踩的坑 写在前面 近期 xff0c 由于朋友需求以及科研任务要求 xff0c 我研究了一下MATLAB GUI设计 xff0c 写了两个小程序 一个是读取excel部门名单生成ex
  • 用MATLAB仿真仿射队形变换(affine formation maneuver)

    文章目录 写在前面如何仿真静态编队控制构建stress matrixMATLAB求解LMI问题静态编队控制源代码 如何仿真时变轨迹和队形变换轨迹生成时变leader控制律时变轨迹和队形变换源代码 写在前面 原论文标题 xff1a Affin
  • 多智能体一致性(Consensus)中的矩阵理论(Matrix Theory)

    文章目录 写在前面一致性算法连续时间离散时间 一致性证明连续时间离散时间 矩阵理论特征值和特征向量特征多项式代数重数几何重数 总结 写在前面 最近在看一些分布式优化的文章 xff0c 但是大部分文章都是用的离散时间算法 我之前一直研究的是连
  • 【论文笔记】利用平滑度加速分布式优化——梯度跟踪法(Gradient Tracking)

    文章目录 写在前面问题描述和算法收敛性证明 写在前面 原论文 xff1a Harnessing Smoothness to Accelerate Distributed Optimization 本文是Qu 20181的笔记 xff0c 主
  • 迭代器是什么,C++ STL迭代器(iterator)用法详解

    无论是序列容器还是关联容器 xff0c 最常做的操作无疑是遍历容器中存储的元素 xff0c 而实现此操作 xff0c 多数情况会选用 迭代器 xff08 iterator xff09 来实现 那么 xff0c 迭代器到底是什么呢 xff1f
  • C++ priority_queue 用法详解

    不出所料 xff0c priority queue 容器适配器定义了一个元素有序排列的队列 默认队列头部的元素优先级最高 因为它是一个队列 xff0c 所以只能访问第一个元素 xff0c 这也意味着优先级最高的元素总是第一个被处理 但是如何
  • 数据库|SQLite编程实例---在线词典

    在线词典项目实例 1 在线词典功能分析 在线词典功能分析框图 2 服务器端和客户端流程图 服务器端流程示意图 客户端流程示意图 3 服务器端和客户端源码 服务器端源码 span class token comment dict server
  • 【力扣刷题】动态规划问题的思考与总结

    文章目录 什么是动态规划解决动态规划问题的步骤基础递推算法子问题求和爬楼梯杨辉三角 子问题最值最大子序和 二维DP数组非最优子结构 买卖股票 xff08 多状态递推 xff09 打家劫舍 xff08 分治算法 xff09 贪心算法背包问题
  • 百度2014移动研发笔试题目

    答案仅供参考 一 简答题 1 简述计算机的存储系统分为哪几个层次 xff0c 为什么这样的分层能够提高程序的执行效率 所谓存储系统的层次结构 xff0c 就是把各种不同存储容量 存取速度和价格的存储器按层次结构组成多层存储器 xff0c 并
  • 横屏layout-land失效的细节问题 以及谈谈不同设置模式的优缺点

    android configChanges 61 34 orientation keyboardHidden screenSize 34 设置之后手机可以识别横屏布局 xff0c 但是不会重建 xff0c 但是pad不识别 xff0c 头疼
  • 数学公式汇总

    高等数学公式篇 平方关系 xff1a sin 2 43 cos 2 61 1 tan 2 43 1 61 sec 2 cot 2 43 1 61 csc 2 积的关系 xff1a sin 61 tan cos cos 61 cot sin
  • KEIL ARM 6.12 compiler 编译__ASM 错误的解决方法

    1 问题 KEIL compiler 设置为 use default compiler version 5 可以正确编译以下汇编和C混合代码 xff0c 更改编译器为V6 12后不识别 ASM关键字 xff0c 并对汇编语法报错 替换为 A
  • 面试题:从给定的N个正数中选取若干个数之和最接近M

    这道题跟捞鱼问题一样 xff0c 都是刚进实验室新生培训那会儿做过的题目 xff0c 不过这个是一师姐当时找工作的面试题 如题 xff0c 并输出该子序列 测试用例 xff1a 2 xff0c 9 xff0c 5 xff0c 7 xff0c
  • 贝叶斯最优分类器

    贝叶斯常常有两个问题 xff1a xff08 1 xff09 给定训练数据 xff0c 最可能的假设是什么 xff1f xff08 2 xff09 给定训练数据 xff0c 对新实例的最可能分类是什么 xff1f 第一个问题用最大后验概率
  • 奇异值分解SVD应用—LSI/LSA

    原文 xff1a http blog csdn net abcjennifer article details 8131087 xff08 有看不懂的地方 xff0c 原文评论有点解答 xff09 潜在语义索引 xff08 Latent S
  • EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接

    EAGAIN EWOULDBLOCK EINTR与非阻塞 长连接 EWOULDBLOCK用于非阻塞模式 xff0c 不需要重新读或者写 EINTR指操作被中断唤醒 xff0c 需要重新读 写 在Linux环境下开发经常会碰到很多错误 设置e