接受错误:资源暂时不可用

Posted

技术标签:

【中文标题】接受错误:资源暂时不可用【英文标题】:ERROR on accept: Resource temporarily unavailable 【发布时间】:2011-10-03 13:11:02 【问题描述】:

我正在尝试用 C 语言在 linux (red-hut) 中创建单线程服务器,它将监听多个套接字。

当我像这样将标志设置为非阻塞时,我需要使用非阻塞套接字:

int flagss = fcntl(socketfds[j],F_GETFL,0); 
flagss |= O_NONBLOCK;
fcntl(socketfds[j],F_SETFL,flagss);

我明白了:

ERROR on accept: Resource temporarily unavailable

否则一切正常。

【问题讨论】:

【参考方案1】:

暂时不可用的资源是 EAGAIN,这并不是真正的错误。它的意思是“我现在没有答案给你,你告诉我不要等,所以我在这里没有答案。”

如果您将侦听套接字设置为非阻塞,accept 应该在没有客户端尝试连接时将 errno 设置为该值。您可以使用select(传统)或poll(语义等价,较新的接口,除非您需要在没有它的旧unix上运行,否则首选)或epoll(针对数千个描述符进行优化,Linux)等待传入连接- 特定的)系统调用。

当然,您将使用poll(或任何替代方法)来等待侦听套接字或任何数据套接字上的数据。

【讨论】:

感谢您对隐含含义的解释!【参考方案2】:

也许,在accept() 之后设置fnctl 标志可以工作。

【讨论】:

以上是关于接受错误:资源暂时不可用的主要内容,如果未能解决你的问题,请参考以下文章

什么会导致 sock send() 命令出现“资源暂时不可用”

HTTP 请求 PostAsync 与 HttpClient 取消请求或资源暂时不可用

SQLSTATE[HY000] [2002] 资源暂时不可用 - mysql - innodb 和 pdo

UDP和套接字,recvfrom()返回-1,资源暂时不可用

无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

资源暂时不可用