繁体   English   中英

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

[英]ERROR on accept: Resource temporarily unavailable

我正在尝试在 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 (或任何替代方法)来等待侦听套接字或任何数据套接字上的数据。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM