+/**
+ * Copyright (C) 2011-2012 Juho Vähä-Herttua
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ */
+
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int use_rtsp;
int max_connections;
+ int open_connections;
http_connection_t *connections;
/* These variables only edited mutex locked */
return;
}
+ httpd->open_connections++;
httpd->connections[i].socket_fd = fd;
httpd->connections[i].connected = 1;
httpd->connections[i].user_data = httpd->callbacks.conn_init(httpd->callbacks.opaque, local, local_len, remote, remote_len);
shutdown(connection->socket_fd, SHUT_WR);
closesocket(connection->socket_fd);
connection->connected = 0;
+ httpd->open_connections--;
}
static THREAD_RETVAL
/* Get the correct nfds value and set rfds */
FD_ZERO(&rfds);
- FD_SET(httpd->server_fd, &rfds);
- nfds = httpd->server_fd+1;
+ if (httpd->open_connections < httpd->max_connections) {
+ FD_SET(httpd->server_fd, &rfds);
+ nfds = httpd->server_fd+1;
+ }
for (i=0; i<httpd->max_connections; i++) {
int socket_fd;
if (!httpd->connections[i].connected) {
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\n", 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\n", connection->socket_fd);
httpd_remove_connection(httpd, connection);
continue;
}
if (!connection->connected) {
continue;
}
- logger_log(httpd->logger, LOGGER_INFO, "Removing connection\n");
+ logger_log(httpd->logger, LOGGER_INFO, "Removing connection for socket %d\n", 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\n");
return 0;
}