From 26c6eb838311c31db0002c7d3c93a81297012d44 Mon Sep 17 00:00:00 2001 From: Baptiste Assmann Date: Thu, 2 Feb 2017 23:14:51 +0100 Subject: [PATCH] BUG/MAJOR: dns: restart sockets after fork() UDP sockets used to send DNS queries are created before fork happens and this is a big problem because all the processes (in case of a configuration starting multiple processes) share the same socket. Some processes may consume responses dedicated to an other one, some servers may be disabled, some IPs changed, etc... As a workaround, this patch close the existing socket and create a new one after the fork() has happened. [wt: backport this to 1.7] --- src/haproxy.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/haproxy.c b/src/haproxy.c index 6a8b5c245..41be9cdfa 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -1950,6 +1950,10 @@ int main(int argc, char **argv) fork_poller(); } + /* initialize structures for name resolution */ + if (!dns_init_resolvers(1)) + exit(1); + protocol_enable_all(); /* * That's it : the central polling loop. Run until we stop.