}
}
if (i == httpd->max_connections) {
- logger_log(httpd->logger, LOGGER_INFO, "Max connections reached\n");
+ logger_log(httpd->logger, LOGGER_INFO, "Max connections reached");
shutdown(fd, SHUT_RDWR);
closesocket(fd);
return;
continue;
} else if (ret == -1) {
/* FIXME: Error happened */
- logger_log(httpd->logger, LOGGER_INFO, "Error in select\n");
+ logger_log(httpd->logger, LOGGER_INFO, "Error in select");
break;
}
continue;
}
- logger_log(httpd->logger, LOGGER_INFO, "Accepted client on socket %d\n", fd);
+ logger_log(httpd->logger, LOGGER_INFO, "Accepted client on socket %d", fd);
local = netutils_get_address(&local_saddr, &local_len);
remote = netutils_get_address(&remote_saddr, &remote_len);
assert(connection->request);
}
- logger_log(httpd->logger, LOGGER_DEBUG, "Receiving on socket %d\n", httpd->connections[i].socket_fd);
+ logger_log(httpd->logger, LOGGER_DEBUG, "Receiving on socket %d", connection->socket_fd);
ret = recv(connection->socket_fd, buffer, sizeof(buffer), 0);
if (ret == 0) {
- logger_log(httpd->logger, LOGGER_INFO, "Connection closed\n");
+ logger_log(httpd->logger, LOGGER_INFO, "Connection closed for socket %d", connection->socket_fd);
httpd_remove_connection(httpd, connection);
continue;
}
/* Parse HTTP request from data read from connection */
http_request_add_data(connection->request, buffer, ret);
if (http_request_has_error(connection->request)) {
- logger_log(httpd->logger, LOGGER_INFO, "Error in parsing: %s\n", http_request_get_error_name(connection->request));
+ logger_log(httpd->logger, LOGGER_INFO, "Error in parsing: %s", http_request_get_error_name(connection->request));
httpd_remove_connection(httpd, connection);
continue;
}
ret = send(connection->socket_fd, data+written, datalen-written, 0);
if (ret == -1) {
/* FIXME: Error happened */
- logger_log(httpd->logger, LOGGER_INFO, "Error in sending data\n");
+ logger_log(httpd->logger, LOGGER_INFO, "Error in sending data");
break;
}
written += ret;
}
} else {
- logger_log(httpd->logger, LOGGER_INFO, "Didn't get response\n");
+ logger_log(httpd->logger, LOGGER_INFO, "Didn't get response");
}
http_response_destroy(response);
}
if (!connection->connected) {
continue;
}
- logger_log(httpd->logger, LOGGER_INFO, "Removing connection\n");
+ logger_log(httpd->logger, LOGGER_INFO, "Removing connection for socket %d", connection->socket_fd);
httpd_remove_connection(httpd, connection);
}
- logger_log(httpd->logger, LOGGER_INFO, "Exiting thread\n");
+ logger_log(httpd->logger, LOGGER_INFO, "Exiting HTTP thread");
return 0;
}
httpd->server_fd = netutils_init_socket(port, 1, 0);
if (httpd->server_fd == -1) {
- logger_log(httpd->logger, LOGGER_INFO, "Error initialising socket %d\n", SOCKET_GET_ERROR());
+ logger_log(httpd->logger, LOGGER_INFO, "Error initialising IPv6 socket %d", SOCKET_GET_ERROR());
+ logger_log(httpd->logger, LOGGER_INFO, "Attempting to fall back to IPv4");
+ httpd->server_fd = netutils_init_socket(port, 0, 0);
+ }
+ if (httpd->server_fd == -1) {
+ logger_log(httpd->logger, LOGGER_INFO, "Error initialising socket %d", SOCKET_GET_ERROR());
MUTEX_UNLOCK(httpd->run_mutex);
return -1;
}
if (listen(httpd->server_fd, 5) == -1) {
- logger_log(httpd->logger, LOGGER_INFO, "Error listening to socket\n");
+ logger_log(httpd->logger, LOGGER_INFO, "Error listening to socket");
MUTEX_UNLOCK(httpd->run_mutex);
return -2;
}
- logger_log(httpd->logger, LOGGER_INFO, "Initialized server socket\n");
+ logger_log(httpd->logger, LOGGER_INFO, "Initialized server socket");
/* Set values correctly and create new thread */
httpd->running = 1;
return 1;
}
+int
+httpd_is_running(httpd_t *httpd)
+{
+ int running;
+
+ assert(httpd);
+
+ MUTEX_LOCK(httpd->run_mutex);
+ running = httpd->running || !httpd->joined;
+ MUTEX_UNLOCK(httpd->run_mutex);
+
+ return running;
+}
+
void
httpd_stop(httpd_t *httpd)
{