From 95138564acbc347c0a5f4f86d9280e3ab1484fd2 Mon Sep 17 00:00:00 2001 From: Remy Noulin Date: Tue, 22 Nov 2022 08:03:22 +0100 Subject: [PATCH] Close some files when too many are open --- src/server.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/server.c b/src/server.c index 56e11c9..359300a 100644 --- a/src/server.c +++ b/src/server.c @@ -115,8 +115,19 @@ accept_client(struct gmnisrv_server *server, int fd) int sockfd = accept(fd, &addr, &addrlen); if (sockfd == -1) { server_error("accept error: %s", strerror(errno)); + if (errno == EMFILE) { + for (int i = 1; i < 4; i++) { + struct gmnisrv_client *client = &server->clients[server->nclients-i]; + disconnect_client(server, client); + } + sockfd = accept(fd, &addr, &addrlen); + if (sockfd != -1) { + goto accepted; + } + } return; } +accepted:; int flags = fcntl(fd, F_GETFL); int r = fcntl(fd, F_SETFL, flags | O_NONBLOCK);