#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
+#include <systemd/sd-daemon.h>
#include <sys/prctl.h>
#include <sys/socket.h>
#include <sys/un.h>
memset(&addr, 0x00, sizeof(struct sockaddr_un));
addr.sun_family = AF_UNIX;
- snprintf(addr.sun_path, sizeof(addr.sun_path), "%s/daemons/%d/%s%d-%d",
+ snprintf(addr.sun_path, sizeof(addr.sun_path), "%s/daemons/%u/%s%d-%d",
SOCKET_PATH, getuid(), LAUNCHPAD_LOADER_SOCKET_NAME,
type, loader_id);
static int __create_sock_activation(void)
{
int fds;
+ char launchpad_process_pool_sock_path[108];
+ int i;
fds = sd_listen_fds(0);
- if (fds == 1)
- return SD_LISTEN_FDS_START;
- else if (fds > 1)
- _E("Too many file descriptors received.");
- else
- _D("There is no socket stream");
+ snprintf(launchpad_process_pool_sock_path,
+ sizeof(launchpad_process_pool_sock_path), "%s/daemons/%u/%s",
+ SOCKET_PATH, getuid(), PROCESS_POOL_LAUNCHPAD_SOCK);
+
+ for (i = SD_LISTEN_FDS_START; i < SD_LISTEN_FDS_START + fds; ++i) {
+ if (sd_is_socket_unix(i, SOCK_STREAM, 1,
+ launchpad_process_pool_sock_path, 0) > 0)
+ return i;
+ }
+ _W("There is no socket stream");
return -1;
}