I want to start unwind earlier, around the time when slaacd comes up,
the network is not up at that point. Set SO_BINDANY to be able to
already bind upd/53 and tcp/53 on localhost.
This will make integration with dhclient easier (I hope).

diff --git unwind.c unwind.c
index 00c600560e4..9bfc4dcf3b8 100644
--- unwind.c
+++ unwind.c
@@ -746,6 +746,9 @@ open_ports(void)
                        if (setsockopt(udp4sock, SOL_SOCKET, SO_SNDBUF, &bsize,
                            sizeof(bsize)) == -1)
                                log_warn("setting SO_SNDBUF on socket");
+                       if (setsockopt(udp4sock, SOL_SOCKET, SO_BINDANY, &opt,
+                           sizeof(opt)) == -1)
+                               log_warn("setting SO_BINDANY on socket");
                        if (bind(udp4sock, res0->ai_addr, res0->ai_addrlen)
                            == -1) {
                                close(udp4sock);
@@ -767,6 +770,9 @@ open_ports(void)
                        if (setsockopt(udp6sock, SOL_SOCKET, SO_SNDBUF, &bsize,
                            sizeof(bsize)) == -1)
                                log_warn("setting SO_SNDBUF on socket");
+                       if (setsockopt(udp6sock, SOL_SOCKET, SO_BINDANY, &opt,
+                           sizeof(opt)) == -1)
+                               log_warn("setting SO_BINDANY on socket");
                        if (bind(udp6sock, res0->ai_addr, res0->ai_addrlen)
                            == -1) {
                                close(udp6sock);
@@ -791,6 +797,9 @@ open_ports(void)
                        if (setsockopt(tcp4sock, SOL_SOCKET, SO_SNDBUF, &bsize,
                            sizeof(bsize)) == -1)
                                log_warn("setting SO_SNDBUF on socket");
+                       if (setsockopt(tcp4sock, SOL_SOCKET, SO_BINDANY, &opt,
+                           sizeof(opt)) == -1)
+                               log_warn("setting SO_BINDANY on socket");
                        if (bind(tcp4sock, res0->ai_addr, res0->ai_addrlen)
                            == -1) {
                                close(tcp4sock);
@@ -817,6 +826,9 @@ open_ports(void)
                        if (setsockopt(tcp6sock, SOL_SOCKET, SO_SNDBUF, &bsize,
                            sizeof(bsize)) == -1)
                                log_warn("setting SO_SNDBUF on socket");
+                       if (setsockopt(tcp6sock, SOL_SOCKET, SO_BINDANY, &opt,
+                           sizeof(opt)) == -1)
+                               log_warn("setting SO_BINDANY on socket");
                        if (bind(tcp6sock, res0->ai_addr, res0->ai_addrlen)
                            == -1) {
                                close(tcp6sock);


-- 
I'm not entirely sure you are real.

Reply via email to