chiark / gitweb /
util: fix missing memory initialization
[elogind.git] / src / socket-util.c
index 4a1b3d8b515536e97fd0b186ceeed5d8ab276a32..5463ffbcbcb4c41e587a469987598a5f898746ad 100644 (file)
@@ -33,6 +33,7 @@
 #include "macro.h"
 #include "util.h"
 #include "socket-util.h"
+#include "missing.h"
 
 int socket_address_parse(SocketAddress *a, const char *s) {
         int r;
@@ -305,6 +306,7 @@ int socket_address_listen(
                 int backlog,
                 SocketAddressBindIPv6Only only,
                 const char *bind_to_device,
+                bool free_bind,
                 mode_t directory_mode,
                 mode_t socket_mode,
                 int *ret) {
@@ -330,6 +332,12 @@ int socket_address_listen(
                 if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, bind_to_device, strlen(bind_to_device)+1) < 0)
                         goto fail;
 
+        if (free_bind) {
+                one = 1;
+                if (setsockopt(fd, IPPROTO_IP, IP_FREEBIND, &one, sizeof(one)) < 0)
+                        log_warning("IP_FREEBIND failed: %m");
+        }
+
         one = 1;
         if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0)
                 goto fail;