chiark / gitweb /
use #pragma once instead of foo*foo define guards
[elogind.git] / src / core / socket.c
index 887ea00fb2710d7ca18a57d46cbc1de6e1c32c60..751f20bdcac73684095099aa8266081168b49d15 100644 (file)
@@ -771,7 +771,7 @@ static void socket_apply_socket_options(Socket *s, int fd) {
 
         if (s->reuseport) {
                 int b = s->reuseport;
-                if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &b, sizeof(b)))
+                if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &b, sizeof(b)) < 0)
                         log_warning_unit(UNIT(s)->id, "SO_REUSEPORT failed: %m");
         }
 
@@ -993,46 +993,51 @@ static int socket_open_fds(Socket *s) {
                                 know_label = true;
                         }
 
-                        if ((r = socket_address_listen(
-                                             &p->address,
-                                             s->backlog,
-                                             s->bind_ipv6_only,
-                                             s->bind_to_device,
-                                             s->free_bind,
-                                             s->transparent,
-                                             s->directory_mode,
-                                             s->socket_mode,
-                                             label,
-                                             &p->fd)) < 0)
+                        r = socket_address_listen(
+                                        &p->address,
+                                        SOCK_CLOEXEC|SOCK_NONBLOCK,
+                                        s->backlog,
+                                        s->bind_ipv6_only,
+                                        s->bind_to_device,
+                                        s->free_bind,
+                                        s->transparent,
+                                        s->directory_mode,
+                                        s->socket_mode,
+                                        label);
+                        if (r < 0)
                                 goto rollback;
 
+                        p->fd = r;
                         socket_apply_socket_options(s, p->fd);
 
                 } else  if (p->type == SOCKET_SPECIAL) {
 
-                        if ((r = special_address_create(
-                                             p->path,
-                                             &p->fd)) < 0)
+                        r = special_address_create(
+                                        p->path,
+                                        &p->fd);
+                        if (r < 0)
                                 goto rollback;
 
                 } else  if (p->type == SOCKET_FIFO) {
 
-                        if ((r = fifo_address_create(
-                                             p->path,
-                                             s->directory_mode,
-                                             s->socket_mode,
-                                             &p->fd)) < 0)
+                        r = fifo_address_create(
+                                        p->path,
+                                        s->directory_mode,
+                                        s->socket_mode,
+                                        &p->fd);
+                        if (r < 0)
                                 goto rollback;
 
                         socket_apply_fifo_options(s, p->fd);
                 } else if (p->type == SOCKET_MQUEUE) {
 
-                        if ((r = mq_address_create(
-                                             p->path,
-                                             s->socket_mode,
-                                             s->mq_maxmsg,
-                                             s->mq_msgsize,
-                                             &p->fd)) < 0)
+                        r = mq_address_create(
+                                        p->path,
+                                        s->socket_mode,
+                                        s->mq_maxmsg,
+                                        s->mq_msgsize,
+                                        &p->fd);
+                        if (r < 0)
                                 goto rollback;
                 } else
                         assert_not_reached("Unknown port type");
@@ -1470,7 +1475,7 @@ static void socket_enter_running(Socket *s, int cfd) {
 
                 socket_set_state(s, SOCKET_RUNNING);
         } else {
-                char *prefix, *instance = NULL, *name;
+                _cleanup_free_ char *prefix = NULL, *instance = NULL, *name = NULL;
                 Service *service;
 
                 if (s->n_connections >= s->max_connections) {
@@ -1498,14 +1503,11 @@ static void socket_enter_running(Socket *s, int cfd) {
 
                 prefix = unit_name_to_prefix(UNIT(s)->id);
                 if (!prefix) {
-                        free(instance);
                         r = -ENOMEM;
                         goto fail;
                 }
 
                 name = unit_name_build(prefix, instance, ".service");
-                free(prefix);
-                free(instance);
 
                 if (!name) {
                         r = -ENOMEM;
@@ -1513,10 +1515,8 @@ static void socket_enter_running(Socket *s, int cfd) {
                 }
 
                 r = unit_add_name(UNIT_DEREF(s->service), name);
-                if (r < 0) {
-                        free(name);
+                if (r < 0)
                         goto fail;
-                }
 
                 service = SERVICE(UNIT_DEREF(s->service));
                 unit_ref_unset(&s->service);
@@ -1525,7 +1525,6 @@ static void socket_enter_running(Socket *s, int cfd) {
                 UNIT(service)->no_gc = false;
 
                 unit_choose_id(UNIT(service), name);
-                free(name);
 
                 r = service_set_socket_fd(service, cfd, s);
                 if (r < 0)