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])