chiark / gitweb /
active: rework make_socket_fd() to be based on socket_address_listen()
[elogind.git] / src / activate / activate.c
index 8b282bda7fa8b71ab1e7bbb1b2b7300220a96660..cf8c5cebdb98115c626283cff7f4eb9b50c383f4 100644 (file)
@@ -91,6 +91,35 @@ static int print_socket(const char* desc, int fd) {
         return 0;
 }
 
+static int make_socket_fd(const char* address, int flags) {
+        _cleanup_free_ char *p = NULL;
+        SocketAddress a;
+        int fd, r;
+
+        r = socket_address_parse(&a, address);
+        if (r < 0) {
+                log_error("Failed to parse socket: %s", strerror(-r));
+                return r;
+        }
+
+        fd = socket_address_listen(&a, flags, SOMAXCONN, SOCKET_ADDRESS_DEFAULT, NULL, false, false, 0755, 0644, NULL);
+        if (fd < 0) {
+                log_error("Failed to listen: %s", strerror(-r));
+                return fd;
+        }
+
+        r = socket_address_print(&a, &p);
+        if (r < 0) {
+                log_error("socket_address_print(): %s", strerror(-r));
+                close_nointr_nofail(fd);
+                return r;
+        }
+
+        log_info("Listening on %s", p);
+
+        return fd;
+}
+
 static int open_sockets(int *epoll_fd, bool accept) {
         int n, fd, r;
         int count = 0;
@@ -129,6 +158,7 @@ static int open_sockets(int *epoll_fd, bool accept) {
                         return fd;
                 }
 
+                assert(fd == SD_LISTEN_FDS_START + count);
                 count ++;
         }
 
@@ -375,9 +405,8 @@ int main(int argc, char **argv, char **envp) {
         int r, n;
         int epoll_fd = -1;
 
-        log_set_max_level(LOG_DEBUG);
-        log_show_color(true);
         log_parse_environment();
+        log_open();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
@@ -391,7 +420,7 @@ int main(int argc, char **argv, char **envp) {
         if (n < 0)
                 return EXIT_FAILURE;
 
-        while (true) {
+        for (;;) {
                 struct epoll_event event;
 
                 r = epoll_wait(epoll_fd, &event, 1, -1);