接受错误:资源暂时不可用
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,资源暂时不可用