diff options
| author | Remy Noulin <loader2x@gmail.com> | 2022-11-22 08:03:22 +0100 |
|---|---|---|
| committer | Drew DeVault <sir@cmpwn.com> | 2022-12-19 12:02:08 +0100 |
| commit | 95138564acbc347c0a5f4f86d9280e3ab1484fd2 (patch) | |
| tree | 9dcbf8e4f127f4281be47c2cffc6a11d0017323c | |
| parent | 132f2ececc012cf4744ca5b8044fb637fed96a0c (diff) | |
| download | gmnisrv-95138564acbc347c0a5f4f86d9280e3ab1484fd2.tar.gz gmnisrv-95138564acbc347c0a5f4f86d9280e3ab1484fd2.tar.xz gmnisrv-95138564acbc347c0a5f4f86d9280e3ab1484fd2.zip | |
Close some files when too many are open
| -rw-r--r-- | src/server.c | 11 |
1 files changed, 11 insertions, 0 deletions
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); |
