c - 接受错误 : Resource temporarily unavailable

标签 c linux sockets

我正在尝试在 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

否则一切正常。

最佳答案

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

如果您将监听套接字设置为非阻塞,就像您所做的那样,accept 应该在没有客户端尝试连接时将 errno 设置为该值。您可以使用 select (传统)或 poll (语义等同,较新的界​​面,首选,除非您需要在没有它的情况下在某些旧 unix 上运行)或 epoll(针对数千个描述符进行了优化,特定于 Linux)系统调用。

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

关于c - 接受错误 : Resource temporarily unavailable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7635440/

相关文章:

c++ - 是否可以将 SDL2 嵌入到应用程序中而不将其构建为库?

linux - 指向 python 模块以安装到指定的站 pip 包位置

linux - sudo ./jetty 停止或启动失败

java - 如何使用同一个套接字发送二进制文件和文本

c - 通过UDP套接字向DNS服务器发送请求

c - 在 gcc 中打开优化后标签移动

c - 打印字符数组

python - 是否可以使用基于 Python 的单元测试框架和运行器来测试 C 代码

c++ - 连续调用 mmap,有缓存吗?

php - 使用php套接字以特定的数据包格式发送数据