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

时间:2011-10-03 13:11:02

标签: c linux sockets

我正在尝试在C语言中创建单线程服务器(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

否则一切都很完美。

2 个答案:

答案 0 :(得分:15)

资源暂时不可用是EAGAIN,这不是一个真正的错误。这意味着“我现在没有给你答案,你告诉我不要等,所以我在这里回答没问题。”

如果您将侦听套接字设置为非阻塞,则accept应该在没有客户端尝试连接时将errno设置为该值。您可以使用select(传统)或poll等待传入连接(语义等效,更新的界面,首选,除非您需要在没有它的情况下运行某些旧的unix)或epoll(已优化)对于成千上万的描述符,特定于Linux的系统调用。

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

答案 1 :(得分:0)

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