- 产生原因:
进程打开的文件描述符达到上限,服务器accept时,返回EMFILE
- 问题:
listenfd一直处于监听状态,而此时服务器无法接受客户端的连接,所以会一直触发,产生busy loop - 处理方法:
一开始打开一个空闲的文件描述符;
当遇到上述情况时,先关闭这个文件描述符,此时将获得一个文件描述符的名额;
再用accept接受客户端连接;
立即关闭connectfd(优雅的与客户端断开连接);
重新打开一个文件描述符,以备再次出现上述情况。
博客指出进程打开的文件描述符达到上限时,服务器accept会返回EMFILE,listenfd处于监听状态却无法接受客户端连接,产生busy loop。处理方法是先打开空闲文件描述符,遇问题时关闭它获取名额,用accept接受连接后关闭connectfd,再重新打开文件描述符。
进程打开的文件描述符达到上限,服务器accept时,返回EMFILE
1168

被折叠的 条评论
为什么被折叠?