[英]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.