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

我试图在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

否则一切都很完美.

解决方法

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

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

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...