man pages for select()不会将EAGAIN列出为select()函数的可能错误代码。
谁能解释在哪种情况下select()会产生EAGAIN错误?
如果我了解select_tut man page,则可以通过向已阻塞的进程发送信号,等待阻塞的select()来产生EAGAIN。这样对吗?
由于我在具有超时的阻止模式下使用select(),如下所示:
bool selectRepeat = true;
int res = 0;
timeval selectTimeout( timeout );
while ( true == selectRepeat )
{
res = ::select( fd.Get() + 1,
NULL,
&writeFdSet,
NULL,
&selectTimeout );
selectRepeat = ( ( -1 == res ) && ( EINTR == errno ) );
}
错误号为EAGAIN时,我应该重复循环吗?
最佳答案
在任何情况下select()
都不会返回EAGAIN
。
但是,如果被信号打断,它可能会返回EINTR
(这适用于大多数系统调用)。EAGAIN
(或EWOULDBLOCK
)可以从read
,write
,recv
,send
等返回。
关于c++ - 处于阻塞模式的管道上的select()返回EAGAIN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4193043/