From da80bd7ebd0e9ba1b948be7ba0a0f9cafe6dd4c3 Mon Sep 17 00:00:00 2001 From: Matthew Leach Date: Sat, 26 Mar 2016 18:50:14 +0000 Subject: [PATCH 3/4] Read the number of sockets passed by systemd. * src/emacs.c (main): Call sd_listen_fds to read the number of sockets passed and call `set_external_socket_descriptor' to set the external socket. --- src/emacs.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/emacs.c b/src/emacs.c index 95d1905..6a77293 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -56,6 +56,11 @@ along with GNU Emacs. If not, see . */ #include #endif +#ifdef HAVE_LIBSYSTEMD +#include +#include +#endif /* HAVE_LIBSYSTEMD */ + #ifdef HAVE_WINDOW_SYSTEM #include TERM_HEADER #endif /* HAVE_WINDOW_SYSTEM */ @@ -676,6 +681,9 @@ main (int argc, char **argv) char dname_arg2[80]; #endif char *ch_to_dir = 0; +#ifdef HAVE_LIBSYSTEMD + int systemd_socket; +#endif /* If we use --chdir, this records the original directory. */ char *original_pwd = 0; @@ -997,6 +1005,20 @@ main (int argc, char **argv) exit (1); } +#ifdef HAVE_LIBSYSTEMD + /* Read the number of sockets passed through by systemd. */ + systemd_socket = sd_listen_fds(1); + + if (systemd_socket > 1) + fprintf (stderr, "\nWarning: systemd has passed more than one socket to the Emacs process.\n\ +Try adding 'Accept=false' in the Emacs socket unit file.\n"); + + else if (systemd_socket == 1 && + sd_is_socket (SD_LISTEN_FDS_START, + AF_UNSPEC, SOCK_STREAM, 1) >= 0) + set_external_socket_descriptor (SD_LISTEN_FDS_START); +#endif /* HAVE_LIBSYSTEMD */ + #ifndef DAEMON_MUST_EXEC #ifdef USE_GTK fprintf (stderr, "\nWarning: due to a long standing Gtk+ bug\nhttp://bugzilla.gnome.org/show_bug.cgi?id=85715\n\ -- 2.8.0