@cryptotaxi247 / netdata-1 / commits / 94167bbc5

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 }