diff --git a/doc/configuration.txt b/doc/configuration.txt index f9bdf2add..bd9a99f13 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -587,7 +587,6 @@ The following keywords are supported in the "global" section : - nosplice - nogetaddrinfo - noreuseport - - no-unused-socket - spread-checks - server-state-base - server-state-file @@ -1251,12 +1250,6 @@ noreuseport Disables the use of SO_REUSEPORT - see socket(7). It is equivalent to the command line argument "-dR". -no-unused-socket - By default, each haproxy process keeps all sockets opened, event those that - are only used by another processes, so that any process can provide all the - sockets, to make reloads seamless. This option disables this, and close all - unused sockets, to save some file descriptors. - spread-checks <0..50, in percent> Sometimes it is desirable to avoid sending agent and health checks to servers at exact intervals, for instance when many logical servers are diff --git a/src/cfgparse.c b/src/cfgparse.c index f16732191..4c0e2d4f0 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -659,11 +659,6 @@ int cfg_parse_global(const char *file, int linenum, char **args, int kwm) goto out; global.tune.options &= ~GTUNE_USE_REUSEPORT; } - else if (!strcmp(args[0], "no-unused-socket")) { - if (alertif_too_many_args(0, file, linenum, args, &err_code)) - goto out; - global.tune.options &= ~GTUNE_SOCKET_TRANSFER; - } else if (!strcmp(args[0], "quiet")) { if (alertif_too_many_args(0, file, linenum, args, &err_code)) goto out; diff --git a/src/haproxy.c b/src/haproxy.c index 261b2136a..5ccebd105 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -859,7 +859,6 @@ static void init(int argc, char **argv) #if defined(SO_REUSEPORT) global.tune.options |= GTUNE_USE_REUSEPORT; #endif - global.tune.options |= GTUNE_SOCKET_TRANSFER; pid = getpid(); progname = *argv; @@ -2165,6 +2164,24 @@ int main(int argc, char **argv) exit(0); /* parent must leave */ } + /* pass through every cli socket, and check if it's bound to + * the current process and if it exposes listeners sockets. + * Caution: the GTUNE_SOCKET_TRANSFER is now set after the fork. + * */ + + if (global.stats_fe) { + struct bind_conf *bind_conf; + + list_for_each_entry(bind_conf, &global.stats_fe->conf.bind, by_fe) { + if (bind_conf->level & ACCESS_FD_LISTENERS) { + if (!bind_conf->bind_proc || bind_conf->bind_proc & (1UL << proc)) { + global.tune.options |= GTUNE_SOCKET_TRANSFER; + break; + } + } + } + } + /* we might have to unbind some proxies from some processes */ px = proxy; while (px != NULL) {