Linux中EAGAIN错误码的含义

EAGAIN错误码通常在Linux的非阻塞操作中出现,当资源暂时不可用,如异步socket的write/send在缓冲区满时或read/recv在无数据可读时。这不是真正的错误,而是提示需要重试。在正常的数据读写流程中,遇到EAGAIN,意味着读缓冲区为空或写缓冲区已满,稍后重试即可。
摘要由CSDN通过智能技术生成

1、出现的情景

EAGAIN错误码一般在linux环境下非阻塞操作中,如果出现Resource temporarily unavailable的情况,则会产生该错误码。

2、 具体原因

比如我们设置了异步socket,采用了write/send循环发发送大量的数据,由于是异步操作,write/send将发送的数据提交到缓冲区之后就会立即返回,并不需要对方确认(即等到数据真正发送给对方),这样就可能导致缓冲区被填满,即出现Resource temporarily unavailable的情况,产生EAGAIN错误码。

采用异步操作,使用read/recv进行读数据的时候,同样可能产生EAGAIN错误码。如果一旦没有数据可读,由于是异步操作,read/recv函数并不会阻塞等待数据准备就绪返回,而是会立即返回,此时也会产生EAGAIN错误码。

3、 应对措施

对于异步操作,严格来讲,EAGAIN 并不能算是真正的错误,因为在正常的度读写数据过程中就会出现,这个错误码表示读缓冲区为空/写缓冲区已满只需要再次尝试即可(再次尝试的时候,可能读缓冲区就有数据到来了,或者写缓冲区数据已经被发送出去了变为可写)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值