chiark / gitweb /
sd-daemon: rework documentation a little
[elogind.git] / src / sd-daemon.c
index eec4722709cb15f89eaca9ad8e2a8aa64ad75cec..29bd20468001a012417ba7e3e686512b4454c803 100644 (file)
@@ -28,6 +28,7 @@
 #include <sys/stat.h>
 #include <sys/socket.h>
 #include <sys/un.h>
 #include <sys/stat.h>
 #include <sys/socket.h>
 #include <sys/un.h>
+#include <sys/fcntl.h>
 #include <netinet/in.h>
 #include <stdlib.h>
 #include <errno.h>
 #include <netinet/in.h>
 #include <stdlib.h>
 #include <errno.h>
@@ -41,7 +42,7 @@ int sd_listen_fds(int unset_environment) {
 #ifdef DISABLE_SYSTEMD
         return 0;
 #else
 #ifdef DISABLE_SYSTEMD
         return 0;
 #else
-        int r;
+        int r, fd;
         const char *e;
         char *p = NULL;
         unsigned long l;
         const char *e;
         char *p = NULL;
         unsigned long l;
@@ -88,6 +89,23 @@ int sd_listen_fds(int unset_environment) {
                 goto finish;
         }
 
                 goto finish;
         }
 
+        for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) {
+                int flags;
+
+                if ((flags = fcntl(fd, F_GETFD)) < 0) {
+                        r = -errno;
+                        goto finish;
+                }
+
+                if (flags & FD_CLOEXEC)
+                        continue;
+
+                if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) {
+                        r = -errno;
+                        goto finish;
+                }
+        }
+
         r = (int) l;
 
 finish:
         r = (int) l;
 
 finish: