-
linux
下使用
writesend
发送数据报
eagainresourcetemporarilyun
available
错
p>
linux
下使用
writesend
p>
发送数据报
EAGAIN :
Resource
temporarily unavailable
错首先是我把套接字设置为异步的
了,然后在使用
w
rite
发送数据时采取的方式是循环发送大
量的数据;
由于是异步的,
writesend
将要发送
的数据提交到
发送缓冲区后是立即返回的,并不需要对端确认数据已接
< br>收。在这种情况下是很有可能出现发送缓冲区被填满,导致
writesend<
/p>
无法再向缓冲区提交要发送的数据。
因此就产生了
Resource temporarily
unavailable
的错误,
EAGAIN
的意思也
很明显,就是要你再次尝试。从字面上来看,是提示再试一
次。这个错误经常出现在当应用程序进行一些非阻塞
(non-bloc
king)
操作
(
对文件或
socket)
的时候。例如,以
O_NONBLOCK
的标志打开文件
/socke
t/FIFO
,
如果你连续做
read
操作而没有数据可读。此时程序不会阻塞起来等待数据
准备就绪
返回,
read
函数会返回一个错误
E
AGAIN
,提示你
的应用程序现在没有数据可读请稍后再试。
又例如,当一个
系统调用
(
比如
fork)
因为没有足够的资源
(
比如虚拟内存
)
而
执行失
败,返回
EAGAIN
提示其再调用一次
(
也许下次就能
成功
)
。
Linux -
非阻塞
socket
编程处理
EAGAIN
错
误在
linux
进行非阻塞的
sock
et
接收数据时经常出现
Resource