]> arthur.barton.de Git - netatalk.git/commitdiff
Change file limit
authorFrank Lahm <franklahm@googlemail.com>
Fri, 20 May 2011 15:42:09 +0000 (17:42 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Fri, 20 May 2011 15:42:09 +0000 (17:42 +0200)
etc/afpd/main.c

index 5e4da980f62b70081ae79d938a545eac999a46cf..9785bc78d0b24a4749bfffc15549ee467e97155b 100644 (file)
@@ -20,6 +20,7 @@
 #include <sys/poll.h>
 #include <errno.h>
 #include <sys/wait.h>
+#include <sys/resource.h>
 
 #include <atalk/adouble.h>
 
@@ -193,6 +194,26 @@ static void child_handler(int sig _U_)
     }
 }
 
+static int setlimits(void)
+{
+    struct rlimit rlim;
+
+    if (getrlimit(RLIMIT_NOFILE, &rlim) != 0) {
+        LOG(log_error, logtype_afpd, "setlimits: %s", strerror(errno));
+        exit(1);
+    }
+    if (rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur < 65535) {
+        rlim.rlim_cur = 65535;
+        if (rlim.rlim_max != RLIM_INFINITY && rlim.rlim_max < 65535)
+            rlim.rlim_max = 65535;
+        if (setrlimit(RLIMIT_NOFILE, &rlim) != 0) {
+            LOG(log_error, logtype_afpd, "setlimits: %s", strerror(errno));
+            exit(1);
+        }
+    }
+    return 0;
+}
+
 int main(int ac, char **av)
 {
     AFPConfig           *config;
@@ -333,6 +354,9 @@ int main(int ac, char **av)
     /* watch atp, dsi sockets and ipc parent/child file descriptor. */
     fd_set_listening_sockets();
 
+    /* set limits */
+    (void)setlimits();
+
     afp_child_t *child;
 
     /* wait for an appleshare connection. parent remains in the loop