on listen socket error, dump the opened sockets; fixes #1282
Costa Tsaousis (ktsaou) committed
Nov 26, 2016 at 16:45 UTC
94167bbc5788975ddc272bb8c8c6f9bf099907e9
1 file changed
+19
-1
src/web_server.c
+19
-1
@@ -7,6 +7,8 @@ char *listen_fds_names[MAX_LISTEN_FDS] = { [0 ... 99] = NULL };
7
int listen_port = LISTEN_PORT;
8
int web_server_mode = WEB_SERVER_MODE_MULTI_THREADED;
9
10
+static int shown_server_socket_error = 0;
11
+
12
#ifdef NETDATA_INTERNAL_CHECKS
13
static void log_allocations(void)
14
{
@@ -90,6 +92,7 @@ int create_listen_socket4(const char *ip, int port, int listen_backlog) {
92
sock = socket(AF_INET, SOCK_STREAM, 0);
93
if(sock < 0) {
94
error("IPv4 socket() on ip '%s' port %d failed.", ip, port);
95
+ shown_server_socket_error = 1;
96
return -1;
97
}
98
@@ -105,6 +108,7 @@ int create_listen_socket4(const char *ip, int port, int listen_backlog) {
108
int ret = inet_pton(AF_INET, ip, (void *)&name.sin_addr.s_addr);
109
if(ret != 1) {
110
error("Failed to convert IP '%s' to a valid IPv4 address.", ip);
111
+ shown_server_socket_error = 1;
112
close(sock);
113
return -1;
114
}
@@ -112,12 +116,14 @@ int create_listen_socket4(const char *ip, int port, int listen_backlog) {
116
if(bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0) {
117
close(sock);
118
error("IPv4 bind() on ip '%s' port %d failed.", ip, port);
119
+ shown_server_socket_error = 1;
120
return -1;
121
}
122
123
if(listen(sock, listen_backlog) < 0) {
124
close(sock);
120
- fatal("IPv4 listen() on ip '%s' port %d failed.", ip, port);
125
+ error("IPv4 listen() on ip '%s' port %d failed.", ip, port);
126
+ shown_server_socket_error = 1;
127
return -1;
128
}
129
@@ -135,6 +141,7 @@ int create_listen_socket6(const char *ip, int port, int listen_backlog) {
141
sock = socket(AF_INET6, SOCK_STREAM, 0);
142
if (sock < 0) {
143
error("IPv6 socket() on ip '%s' port %d failed.", ip, port);
144
+ shown_server_socket_error = 1;
145
return -1;
146
}
147
@@ -154,6 +161,7 @@ int create_listen_socket6(const char *ip, int port, int listen_backlog) {
161
int ret = inet_pton(AF_INET6, ip, (void *)&name.sin6_addr.s6_addr);
162
if(ret != 1) {
163
error("Failed to convert IP '%s' to a valid IPv6 address.", ip);
164
+ shown_server_socket_error = 1;
165
close(sock);
166
return -1;
167
}
@@ -163,12 +171,14 @@ int create_listen_socket6(const char *ip, int port, int listen_backlog) {
171
if (bind (sock, (struct sockaddr *) &name, sizeof (name)) < 0) {
172
close(sock);
173
error("IPv6 bind() on ip '%s' port %d failed.", ip, port);
174
+ shown_server_socket_error = 1;
175
return -1;
176
}
177
178
if (listen(sock, listen_backlog) < 0) {
179
close(sock);
180
error("IPv6 listen() on ip '%s' port %d failed.", ip, port);
181
+ shown_server_socket_error = 1;
182
return -1;
183
}
184
@@ -179,6 +189,7 @@ int create_listen_socket6(const char *ip, int port, int listen_backlog) {
189
static inline int add_listen_socket(int fd, const char *ip, int port) {
190
if(listen_fds_count >= MAX_LISTEN_FDS) {
191
error("Too many listening sockets. Failed to add listening socket at ip '%s' port %d", ip, port);
192
+ shown_server_socket_error = 1;
193
close(fd);
194
return -1;
195
}
@@ -303,6 +314,8 @@ static inline int bind_to_one(const char *definition, int default_port, int list
314
}
315
316
int create_listen_sockets(void) {
317
+ shown_server_socket_error = 0;
318
+
319
listen_backlog = (int) config_get_number("global", "http port listen backlog", LISTEN_BACKLOG);
320
321
if(config_exists("global", "bind socket to IP") && !config_exists("global", "bind to"))
@@ -340,6 +353,11 @@ int create_listen_sockets(void) {
353
354
if(!listen_fds_count)
355
fatal("Cannot listen on any socket. Exiting...");
356
+ else if(shown_server_socket_error) {
357
+ size_t i;
358
+ for(i = 0; i < listen_fds_count ;i++)
359
+ info("Listen socket %s opened.", listen_fds_names[i]);
360
+ }
361
362
return (int)listen_fds_count;
363
}