I can't think of a downside, OK. (Not sure of a use case either though.) On 29 August 2020 19:13:40 CEST, Jeremie Courreges-Anglas <[email protected]> wrote: >On Sat, Aug 29 2020, Stuart Henderson <[email protected]> wrote: >> On 2020/08/27 15:28, Florian Obser wrote: >>> all heavy lifting done by sthen in unbound >>> >>> tests? >> >> ok with me. only tested lightly (the machine I normally use does DNS >for >> other machines too so runs unbound). >> >> related, any idea what's happening here? >> >> unwind[51500]: fatal in main: could not bind to 127.0.0.1 or ::1 on >port 53: Address already in use >> >> unbound is listening to *:53, but shouldn't other software be able to >> listen if bound to a specific address like 127.0.0.1:53? is this a >bug >> somewhere or am I just missing something about UDP? > >Once *:53 is bound you need SO_REUSEADDR to loosen the checks. ktrace >says unbound(8) uses this unconditionally. ChangeLog entry: > > - Fix #531: Set SO_REUSEADDR so that the wildcard interface and a > more specific interface port 53 can be used at the same time, and > one of the daemons is unbound. > >I think unwind could use the same treatment. > >Note that using SO_REUSEADDR still prevents two unwind copies from >binding to 127.0.0.1:53 / [::1]:53 (for that to work you'd need >SO_REUSEPORT instead). > >Thoughts? oks? > > >Index: unwind.c >=================================================================== >RCS file: /d/cvs/src/sbin/unwind/unwind.c,v >retrieving revision 1.47 >diff -u -p -p -u -r1.47 unwind.c >--- unwind.c 25 May 2020 16:52:15 -0000 1.47 >+++ unwind.c 29 Aug 2020 17:07:49 -0000 >@@ -726,6 +726,7 @@ open_ports(void) > { > struct addrinfo hints, *res0; > int udp4sock = -1, udp6sock = -1, error; >+ int opt = 1; > > memset(&hints, 0, sizeof(hints)); > hints.ai_family = AF_INET; >@@ -736,6 +737,9 @@ open_ports(void) > if (!error && res0) { > if ((udp4sock = socket(res0->ai_family, res0->ai_socktype, > res0->ai_protocol)) != -1) { >+ if (setsockopt(udp4sock, SOL_SOCKET, SO_REUSEADDR, >+ &opt, sizeof(opt)) == -1) >+ log_warn("setting SO_REUSEADDR on socket"); > if (bind(udp4sock, res0->ai_addr, res0->ai_addrlen) > == -1) { > close(udp4sock); >@@ -751,6 +755,9 @@ open_ports(void) > if (!error && res0) { > if ((udp6sock = socket(res0->ai_family, res0->ai_socktype, > res0->ai_protocol)) != -1) { >+ if (setsockopt(udp6sock, SOL_SOCKET, SO_REUSEADDR, >+ &opt, sizeof(opt)) == -1) >+ log_warn("setting SO_REUSEADDR on socket"); > if (bind(udp6sock, res0->ai_addr, res0->ai_addrlen) > == -1) { > close(udp6sock);
-- Sent from a mobile device. Please excuse poor formating.
