From 2c78bdf94c0fdd6240d5d202cf5aba12ac8c5a20 Mon Sep 17 00:00:00 2001 From: Pavel Rochnyack Date: Sat, 10 Feb 2018 17:46:30 +0700 Subject: [PATCH] write_prometheus: Set SO_REUSEADDR on listening socket Otherwise Collectd fails to bind the socket after restart. Thanks to Richard Weinberger and Brandon Hume for reporting. Closes: #2570 Closes: #2673 --- src/write_prometheus.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/write_prometheus.c b/src/write_prometheus.c index 97f583f3..ba186a7e 100644 --- a/src/write_prometheus.c +++ b/src/write_prometheus.c @@ -764,6 +764,16 @@ static int prom_open_socket(int addrfamily) { if (fd == -1) continue; + int tmp = 1; + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &tmp, sizeof(tmp)) != 0) { + char errbuf[1024]; + WARNING("write_prometheus: setsockopt(SO_REUSEADDR) failed: %s", + sstrerror(errno, errbuf, sizeof(errbuf))); + close(fd); + fd = -1; + continue; + } + if (bind(fd, ai->ai_addr, ai->ai_addrlen) != 0) { close(fd); fd = -1; -- 2.11.0