gpt4 book ai didi

c++ - 阻塞模式下管道上的 select() 返回 EAGAIN

转载 作者:太空狗 更新时间:2023-10-29 11:34:40 27 4
gpt4 key购买 nike

man pages for select()不要将 EAGAIN 列为 select() 函数的可能错误代码。

谁能解释一下 select() 在哪些情况下会产生 EAGAIN 错误?

如果我明白select_tut man page , EAGAIN 可以通过向阻塞等待阻塞 select() 的进程发送信号来产生。这是正确的吗?

因为我在带超时的阻塞模式下使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com