【转】Linux中的EAGAIN含义

  在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,那表明连接已经断开,我们的接收操作也应该结束。

iReadSizeOnce=read(iOpenCom,RxBuf+iReadSize,1024);
if (iReadSizeOnce != ZERO) {
    if (iReadSizeOnce != EAGAIN) {
            continue;
    }
    else {
    //stCComApiLog.LogError("读串口操作错误");
       return(FUN_ERROR);
    }
}

【转】Linux中的EAGAIN含义,布布扣,bubuko.com

时间: 2024-11-06 09:46:23

【转】Linux中的EAGAIN含义的相关文章

Linux中的EAGAIN含义

首先是我把套接字设置为异步的了,然后在使用write发送数据时采取的方式是循环发送大量的数据:由于是异步的,write\send将要发送的数据提交到发送缓冲区后是立即返回的,并不需要对端确认数据已接收.在这种情况下是很有可能出现发送缓冲区被填满,导致write\send无法再向缓冲区提交要发送的数据.因此就产生了Resource temporarily unavailable的错误,EAGAIN 的意思也很明显,就是要你再次尝试. 从字面上来看,是提示再试一次.这个错误经常出现在当应用程序进行一

linux中$的各种含义

我们先写一个简单的脚本,执行以后再解释各个变量的意义   # touch variable # vi variable   脚本内容如下:   #!/bin/sh echo "number:$#" echo "scname:$0" echo "first :$1" echo "second:$2" echo "argume:[email protected]" echo "show parm li

linux中 su - 的含义,及其作用是什么?

su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell:而后者连用户和Shell环境一起切换成root身份了.只有切换了Shell环境才不会出现PATH环境变量错误.su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录:而用su -命令切换以后,工作目录变成root的工作目录了.用echo $PATH命令看一下su和su -以后的环境变量有何不同.以此类推,要从当前用户切换到其它用户也一样,应该使用su -命令.如

Linux编程下EAGAIN和EINTR宏的含义及处理

Linux中的EAGAIN含义 在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). linux下使用write\send发送数据报 EAGAIN : Resource temporarily unavailable 错 首先是我把套接字设置为异步的了,然后在使用write发送数据时采取的方式是循环发送大量的数据:由于是异步的,write\send将要发送的数据提交到发送缓冲区后是立即返回的,并不需要对端确认数据已接收.在

linux中shell变量$#,[email protected],$0,$1,$2的含义解释

摘抄自:ABS_GUIDE 下载地址:http://www.tldp.org/LDP/abs/abs-guide.pdf linux中shell变量$#,[email protected],$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表.如"$*"用「"」括起来的情况.以&qu

linux中的$0 S# $*……的含义

$0 这个程式的执行名字 $n 这个程式的第n个参数值,n=1..9 $* 这个程式的所有参数,此选项参数可超过9个. $# 这个程式的参数个数 $$ 这个程式的PID(脚本运行的当前号) $! 执行上一个背景指令的PID(后台运行的最后一个进程的号) $? 执行上一个指令的返回值 (显示最后命令的退出状态.0表示没有错误,其他任何值表明有错误) $- 显示shell使用的当前选项,与set命令功能相同 [email protected] 跟$*类似,但是可以当作数组用 linux中shell变

Linux中shell变量$0,$?等含义

linux中shell变量$#,[email protected],$0,$1,$2的基本含义: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表.如"$*"用「"」括起来的情况.以"$1 $2 … $n"的形式输出所有参数. [email protected] 所有参数列表.如"

【Shell】linux中shell变量$#,[email protected],$0,$1,$2的含义解释 && set 关键字使用

linux中shell变量$#,[email protected],$0,$1,$2的含义解释 摘抄自:ABS_GUIDE 下载地址:http://www.tldp.org/LDP/abs/abs-guide.pdf linux中shell变量$#,[email protected],$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定

【转】linux中shell变量$#,[email protected],$0,$1,$2的含义解释

原文网址:http://www.cnblogs.com/fhefh/archive/2011/04/15/2017613.html linux中shell变量$#,[email protected],$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表.如"$*"用「"」括起来的情况