On Wed, Nov 01 2017, Florian Obser <flor...@openbsd.org> wrote: > OK?
ok jca@ btw the diff below has already been posted to tech@: https://marc.info/?l=openbsd-tech&m=147747266305927&w=2 > diff --git server.c server.c > index c0835ce8c11..fe74f9a1b56 100644 > --- server.c > +++ server.c > @@ -567,7 +567,7 @@ server_init_ifs(struct nsd *nsd, size_t from, size_t to, > int* reuseport_works) > { > struct addrinfo* addr; > size_t i; > -#if defined(SO_REUSEPORT) || defined(SO_REUSEADDR) || (defined(INET6) && > (defined(IPV6_V6ONLY) || defined(IPV6_USE_MIN_MTU) || defined(IPV6_MTU) || > defined(IP_TRANSPARENT)) || defined(IP_FREEBIND)) > +#if defined(SO_REUSEPORT) || defined(SO_REUSEADDR) || (defined(INET6) && > (defined(IPV6_V6ONLY) || defined(IPV6_USE_MIN_MTU) || defined(IPV6_MTU) || > defined(IP_TRANSPARENT)) || defined(IP_FREEBIND) || defined(SO_BINDANY)) > int on = 1; > #endif > > @@ -757,6 +757,12 @@ server_init_ifs(struct nsd *nsd, size_t from, size_t to, > int* reuseport_works) > strerror(errno)); > } > #endif /* IP_TRANSPARENT */ > +#ifdef SO_BINDANY > + if (setsockopt(nsd->udp[i].s, SOL_SOCKET, SO_BINDANY, > &on, sizeof(on)) < 0) { > + log_msg(LOG_ERR, "setsockopt(...,SO_BINDANY, > ...) failed for udp: %s", > + strerror(errno)); > + } > +#endif /* SO_BINDANY */ > } > > if (bind(nsd->udp[i].s, (struct sockaddr *) addr->ai_addr, > addr->ai_addrlen) != 0) { > @@ -887,6 +893,12 @@ server_init_ifs(struct nsd *nsd, size_t from, size_t to, > int* reuseport_works) > strerror(errno)); > } > #endif /* IP_TRANSPARENT */ > +#ifdef SO_BINDANY > + if (setsockopt(nsd->tcp[i].s, SOL_SOCKET, SO_BINDANY, > &on, sizeof(on)) < 0) { > + log_msg(LOG_ERR, "setsockopt(...,SO_BINDANY, > ...) failed for tcp: %s", > + strerror(errno)); > + } > +#endif /* SO_BINDANY */ > } > > if (bind(nsd->tcp[i].s, (struct sockaddr *) addr->ai_addr, > addr->ai_addrlen) != 0) { -- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE