chiark / gitweb /
activate: export make_socket_fd
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 10 Mar 2014 01:33:04 +0000 (21:33 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 17 Mar 2014 05:55:48 +0000 (01:55 -0400)
Also improve logging to print out the parsed address on error.

src/activate/activate.c
src/shared/socket-label.c
src/shared/socket-util.h

index 23c484c..8c58273 100644 (file)
@@ -59,25 +59,6 @@ static int add_epoll(int epoll_fd, int fd) {
         return 0;
 }
 
-static int make_socket_fd(const char* address, int flags) {
-        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;
-        }
-
-        return fd;
-}
-
 static int open_sockets(int *epoll_fd, bool accept) {
         char **address;
         int n, fd, r;
@@ -119,7 +100,7 @@ static int open_sockets(int *epoll_fd, bool accept) {
 
         STRV_FOREACH(address, arg_listen) {
 
-                fd = make_socket_fd(*address, SOCK_STREAM | (arg_accept*SOCK_CLOEXEC));
+                fd = make_socket_fd(LOG_DEBUG, *address, SOCK_STREAM | (arg_accept*SOCK_CLOEXEC));
                 if (fd < 0) {
                         log_open();
                         log_error("Failed to open '%s': %s", *address, strerror(-fd));
index c8be17a..1e78dd2 100644 (file)
@@ -143,3 +143,33 @@ int socket_address_listen(
 
         return r;
 }
+
+int make_socket_fd(int log_level, const char* address, int flags) {
+        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_get_max_level() >= log_level) {
+                char _cleanup_free_ *p = NULL;
+
+                r = socket_address_print(&a, &p);
+                if (r < 0) {
+                        log_error("socket_address_print(): %s", strerror(-r));
+                        return r;
+                }
+
+                if (fd < 0)
+                        log_error("Failed to listen on %s: %s", p, strerror(-r));
+                else
+                        log_full(log_level, "Listening on %s", p);
+        }
+
+        return fd;
+}
index 84ebc30..efaaf82 100644 (file)
@@ -84,6 +84,7 @@ int socket_address_listen(
                 mode_t directory_mode,
                 mode_t socket_mode,
                 const char *label);
+int make_socket_fd(int log_level, const char* address, int flags);
 
 bool socket_address_is(const SocketAddress *a, const char *s, int type);
 bool socket_address_is_netlink(const SocketAddress *a, const char *s);