repositories
/
deb_shairplay.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
debab1b
)
Do not accept new connections if the connection buffer is full.
author
Juho Vähä-Herttua
<juhovh@iki.fi>
Wed, 14 Mar 2012 19:36:07 +0000
(21:36 +0200)
committer
Juho Vähä-Herttua
<juhovh@iki.fi>
Wed, 16 May 2012 21:33:31 +0000
(
00:33
+0300)
src/lib/httpd.c
patch
|
blob
|
blame
|
history
diff --git
a/src/lib/httpd.c
b/src/lib/httpd.c
index 9a56997ac4ee1c0b61c82719940b402b5764446a..6ad28696b397c3edc3247a1899035f5ace652510 100644
(file)
--- a/
src/lib/httpd.c
+++ b/
src/lib/httpd.c
@@
-39,6
+39,7
@@
struct httpd_s {
int use_rtsp;
int max_connections;
int use_rtsp;
int max_connections;
+ int open_connections;
http_connection_t *connections;
/* These variables only edited mutex locked */
http_connection_t *connections;
/* These variables only edited mutex locked */
@@
-115,6
+116,7
@@
httpd_add_connection(httpd_t *httpd, int fd, unsigned char *local, int local_len
return;
}
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);
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);
@@
-131,6
+133,7
@@
httpd_remove_connection(httpd_t *httpd, http_connection_t *connection)
shutdown(connection->socket_fd, SHUT_WR);
closesocket(connection->socket_fd);
connection->connected = 0;
shutdown(connection->socket_fd, SHUT_WR);
closesocket(connection->socket_fd);
connection->connected = 0;
+ httpd->open_connections--;
}
static THREAD_RETVAL
}
static THREAD_RETVAL
@@
-161,8
+164,10
@@
httpd_thread(void *arg)
/* Get the correct nfds value and set rfds */
FD_ZERO(&rfds);
/* 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) {
for (i=0; i<httpd->max_connections; i++) {
int socket_fd;
if (!httpd->connections[i].connected) {