@cryptotaxi247 / netdata-1 / commits / 177348293

print to error.log the sockets netdata is listening

Costa Tsaousis committed Jul 25, 2016 at 12:27 UTC 17734829315099321f7807812ad1dc5628ae5220
1 file changed +32 -9
src/web_server.c
+32 -9
@@ -31,6 +31,7 @@
31 int listen_backlog = LISTEN_BACKLOG;
32 int listen_fds_count = 0;
33 int listen_fds[MAX_LISTEN_FDS] = { [0 ... 99] = -1 };
34 +char *listen_fds_names[MAX_LISTEN_FDS] = { [0 ... 99] = NULL };
35 int listen_port = LISTEN_PORT;
36 int web_server_mode = WEB_SERVER_MODE_MULTI_THREADED;
37
@@ -181,12 +182,20 @@ int create_listen_socket6(const char *ip, int port, int listen_backlog) {
182 return sock;
183 }
184
184 -static inline int add_listen_socket(int fd) {
185 - if(listen_fds_count >= MAX_LISTEN_FDS)
185 +static inline int add_listen_socket(int fd, const char *ip, int port) {
186 + if(listen_fds_count >= MAX_LISTEN_FDS) {
187 + error("Too many listening sockets. Failed to add listening socket at ip '%s' port %d", ip, port);
188 + close(fd);
189 return -1;
190 + }
191 +
192 + listen_fds[listen_fds_count] = fd;
193
188 - listen_fds[listen_fds_count++] = fd;
194 + char buffer[100 + 1];
195 + snprintfz(buffer, 100, "[%s]:%d", ip, port);
196 + listen_fds_names[listen_fds_count] = strdup(buffer);
197
198 + listen_fds_count++;
199 return 0;
200 }
201
@@ -200,8 +209,14 @@ int is_listen_socket(int fd) {
209
210 static inline void close_listen_sockets(void) {
211 int i;
203 - for(i = 0; i < listen_fds_count ;i++)
212 + for(i = 0; i < listen_fds_count ;i++) {
213 close(listen_fds[i]);
214 + listen_fds[i] = -1;
215 +
216 + if(listen_fds_names[i]) free(listen_fds_names[i]);
217 + listen_fds_names[i] = NULL;
218 + }
219 +
220 listen_fds_count = 0;
221 }
222
@@ -260,18 +275,22 @@ static inline int bind_to_one(const char *definition, int default_port, int list
275 int fd = -1;
276
277 char rip[INET_ADDRSTRLEN + INET6_ADDRSTRLEN] = "INVALID";
278 + int rport = default_port;
279 +
280 switch (rp->ai_addr->sa_family) {
281 case AF_INET: {
282 struct sockaddr_in *sin = (struct sockaddr_in *) rp->ai_addr;
283 inet_ntop(AF_INET, &sin->sin_addr, rip, INET_ADDRSTRLEN);
267 - fd = create_listen_socket4(rip, ntohs(sin->sin_port), listen_backlog);
284 + rport = ntohs(sin->sin_port);
285 + fd = create_listen_socket4(rip, rport, listen_backlog);
286 break;
287 }
288
289 case AF_INET6: {
290 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) rp->ai_addr;
291 inet_ntop(AF_INET6, &sin6->sin6_addr, rip, INET6_ADDRSTRLEN);
274 - fd = create_listen_socket6(rip, ntohs(sin6->sin6_port), listen_backlog);
292 + rport = ntohs(sin6->sin6_port);
293 + fd = create_listen_socket6(rip, rport, listen_backlog);
294 break;
295 }
296 }
@@ -279,7 +298,7 @@ static inline int bind_to_one(const char *definition, int default_port, int list
298 if (fd == -1)
299 error("Cannot bind to ip '%s', port %d", rip, default_port);
300 else {
282 - add_listen_socket(fd);
301 + add_listen_socket(fd, rip, rport);
302 added++;
303 }
304 }
@@ -383,7 +402,9 @@ void *socket_listen_main_multi_threaded(void *ptr) {
402 fds[i].fd = listen_fds[i];
403 fds[i].events = POLLIN;
404 fds[i].revents = 0;
386 - }
405 +
406 + info("Listening on '%s'", (listen_fds_names[i])?listen_fds_names[i]:"UNKNOWN");
407 + }
408
409 int timeout = 10 * 1000;
410
@@ -489,7 +510,7 @@ void *socket_listen_main_single_threaded(void *ptr) {
510
511 web_server_mode = WEB_SERVER_MODE_SINGLE_THREADED;
512
492 - info("Single threaded WEB SERVER thread created with task id %d", gettid());
513 + info("Single-threaded WEB SERVER thread created with task id %d", gettid());
514
515 struct web_client *w;
516 int retval;
@@ -520,6 +541,8 @@ void *socket_listen_main_single_threaded(void *ptr) {
541 if (listen_fds[i] < 0 || listen_fds[i] >= FD_SETSIZE)
542 fatal("LISTENER: Listen socket %d is not ready, or invalid.", listen_fds[i]);
543
544 + info("Listening on '%s'", (listen_fds_names[i])?listen_fds_names[i]:"UNKNOWN");
545 +
546 FD_SET(listen_fds[i], &ifds);
547 FD_SET(listen_fds[i], &efds);
548 if(fdmax < listen_fds[i])