1、出现的情景

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

2、 具体原因

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

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

3、 应对措施

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

Logo

更多推荐