[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r5242 - in GNUnet/src: include server transports util/netwo
From: |
gnunet |
Subject: |
[GNUnet-SVN] r5242 - in GNUnet/src: include server transports util/network |
Date: |
Thu, 5 Jul 2007 00:00:10 -0600 (MDT) |
Author: grothoff
Date: 2007-07-05 00:00:10 -0600 (Thu, 05 Jul 2007)
New Revision: 5242
Modified:
GNUnet/src/include/gnunet_util_network.h
GNUnet/src/server/tcpserver.c
GNUnet/src/transports/tcp.c
GNUnet/src/transports/tcp6.c
GNUnet/src/transports/tcp_helper.c
GNUnet/src/transports/udp.c
GNUnet/src/transports/udp6.c
GNUnet/src/util/network/select.c
Log:
limit total number of connections
Modified: GNUnet/src/include/gnunet_util_network.h
===================================================================
--- GNUnet/src/include/gnunet_util_network.h 2007-07-05 05:50:25 UTC (rev
5241)
+++ GNUnet/src/include/gnunet_util_network.h 2007-07-05 06:00:10 UTC (rev
5242)
@@ -424,6 +424,8 @@
* @param mon maybe NULL
* @param memory_quota amount of memory available for
* queueing messages (in bytes)
+ * @param socket_quota how many connections do we
+ * accept at most? 0 for unbounded
* @return NULL on error
*/
struct SelectHandle *
@@ -440,7 +442,8 @@
void * ah_cls,
SelectCloseHandler ch,
void * ch_cls,
- unsigned int memory_quota);
+ unsigned int memory_quota,
+ int socket_quota);
/**
* Terminate the select thread, close the socket and
Modified: GNUnet/src/server/tcpserver.c
===================================================================
--- GNUnet/src/server/tcpserver.c 2007-07-05 05:50:25 UTC (rev 5241)
+++ GNUnet/src/server/tcpserver.c 2007-07-05 06:00:10 UTC (rev 5242)
@@ -349,7 +349,8 @@
NULL,
&select_close_handler,
NULL,
- 0 /* no memory quota */);
+ 0 /* no memory quota */,
+ 256 /* max sockets */);
if (selector == NULL) {
CLOSE(listenerFD); /* maybe closed already
depending on how select_create
Modified: GNUnet/src/transports/tcp.c
===================================================================
--- GNUnet/src/transports/tcp.c 2007-07-05 05:50:25 UTC (rev 5241)
+++ GNUnet/src/transports/tcp.c 2007-07-05 06:00:10 UTC (rev 5242)
@@ -468,14 +468,15 @@
coreAPI->load_monitor,
s,
sizeof(struct sockaddr_in),
- TCP_TIMEOUT,
+ TCP_FAST_TIMEOUT,
&select_message_handler,
NULL,
&select_accept_handler,
&isRejected,
&select_close_handler,
NULL,
- 128 * 1024);
+ 128 * 1024 /* max memory */,
+ 128 /* max sockets */);
return OK;
}
Modified: GNUnet/src/transports/tcp6.c
===================================================================
--- GNUnet/src/transports/tcp6.c 2007-07-05 05:50:25 UTC (rev 5241)
+++ GNUnet/src/transports/tcp6.c 2007-07-05 06:00:10 UTC (rev 5242)
@@ -426,14 +426,15 @@
coreAPI->load_monitor,
s,
sizeof(IPaddr),
- TCP6_TIMEOUT,
+ TCP_FAST_TIMEOUT,
&select_message_handler,
NULL,
&select_accept_handler,
&isRejected,
&select_close_handler,
NULL,
- 128 * 1024);
+ 128 * 1024 /* max memory */,
+ 128 /* max sockets */);
return OK;
}
Modified: GNUnet/src/transports/tcp_helper.c
===================================================================
--- GNUnet/src/transports/tcp_helper.c 2007-07-05 05:50:25 UTC (rev 5241)
+++ GNUnet/src/transports/tcp_helper.c 2007-07-05 06:00:10 UTC (rev 5242)
@@ -201,7 +201,7 @@
(tcpSession->in_select == YES) )
select_change_timeout(selector,
tcpSession->sock,
- 0 /* default */);
+ TCP_TIMEOUT);
tcpSession->users++;
MUTEX_UNLOCK(tcpSession->lock);
Modified: GNUnet/src/transports/udp.c
===================================================================
--- GNUnet/src/transports/udp.c 2007-07-05 05:50:25 UTC (rev 5241)
+++ GNUnet/src/transports/udp.c 2007-07-05 06:00:10 UTC (rev 5242)
@@ -427,7 +427,8 @@
&isRejected,
&select_close_handler,
NULL,
- 64 * 1024);
+ 64 * 1024,
+ 16 /* max sockets */);
if (selector == NULL)
return SYSERR;
}
Modified: GNUnet/src/transports/udp6.c
===================================================================
--- GNUnet/src/transports/udp6.c 2007-07-05 05:50:25 UTC (rev 5241)
+++ GNUnet/src/transports/udp6.c 2007-07-05 06:00:10 UTC (rev 5242)
@@ -390,7 +390,8 @@
&isRejected,
&select_close_handler,
NULL,
- 64 * 1024);
+ 64 * 1024,
+ 16 /* max sockets */);
if (selector == NULL)
return SYSERR;
}
Modified: GNUnet/src/util/network/select.c
===================================================================
--- GNUnet/src/util/network/select.c 2007-07-05 05:50:25 UTC (rev 5241)
+++ GNUnet/src/util/network/select.c 2007-07-05 06:00:10 UTC (rev 5242)
@@ -161,6 +161,8 @@
unsigned int memory_quota;
+ int socket_quota;
+
} SelectHandle;
static void add_to_select_set(struct SocketHandle * s,
@@ -240,6 +242,7 @@
s->sock_ctx);
MUTEX_LOCK(sh->lock);
socket_destroy(s->sock);
+ sh->socket_quota++;
GROW(s->rbuff,
s->rsize,
0);
@@ -551,49 +554,56 @@
if ( (errno == EAGAIN) || (errno == EWOULDBLOCK))
continue; /* not good, but not fatal either */
break;
- } else {
+ }
+ if (sh->socket_quota <= 0) {
+ SHUTDOWN(s, SHUT_WR);
+ CLOSE(s);
+ s = -1;
+ continue;
+ }
+ sh->socket_quota--;
#if DEBUG_SELECT
- GE_LOG(sh->ectx,
- GE_DEBUG | GE_DEVELOPER | GE_BULK,
- "Select %p is accepting connection: %d\n",
- sh,
- s);
+ GE_LOG(sh->ectx,
+ GE_DEBUG | GE_DEVELOPER | GE_BULK,
+ "Select %p is accepting connection: %d\n",
+ sh,
+ s);
#endif
- sock = socket_create(sh->ectx,
- sh->load_monitor,
- s);
- MUTEX_UNLOCK(sh->lock);
- sctx = sh->ah(sh->ah_cls,
- sh,
- sock,
- clientAddr,
- lenOfIncomingAddr);
- MUTEX_LOCK(sh->lock);
+ sock = socket_create(sh->ectx,
+ sh->load_monitor,
+ s);
+ MUTEX_UNLOCK(sh->lock);
+ sctx = sh->ah(sh->ah_cls,
+ sh,
+ sock,
+ clientAddr,
+ lenOfIncomingAddr);
+ MUTEX_LOCK(sh->lock);
#if DEBUG_SELECT
- GE_LOG(sh->ectx,
- GE_DEBUG | GE_DEVELOPER | GE_BULK,
- "Select %p is accepting connection: %p\n",
- sh,
- sctx);
+ GE_LOG(sh->ectx,
+ GE_DEBUG | GE_DEVELOPER | GE_BULK,
+ "Select %p is accepting connection: %p\n",
+ sh,
+ sctx);
#endif
- if (sctx == NULL) {
- socket_destroy(sock);
- } else {
- session = MALLOC(sizeof(Session));
- memset(session,
- 0,
- sizeof(Session));
- session->sock = sock;
- session->sock_ctx = sctx;
- session->lastUse = get_time();
- if (sh->sessionArrayLength == sh->sessionCount)
- GROW(sh->sessions,
- sh->sessionArrayLength,
- sh->sessionArrayLength + 4);
- sh->sessions[sh->sessionCount++] = session;
- }
+ if (sctx == NULL) {
+ socket_destroy(sock);
+ sh->socket_quota++;
+ } else {
+ session = MALLOC(sizeof(Session));
+ memset(session,
+ 0,
+ sizeof(Session));
+ session->sock = sock;
+ session->sock_ctx = sctx;
+ session->lastUse = get_time();
+ if (sh->sessionArrayLength == sh->sessionCount)
+ GROW(sh->sessions,
+ sh->sessionArrayLength,
+ sh->sessionArrayLength + 4);
+ sh->sessions[sh->sessionCount++] = session;
}
- }
+ }
} else { /* is_udp == YES */
if ( (sh->listen_sock != NULL) &&
(FD_ISSET(sh->listen_sock->handle, &readSet)) ) {
@@ -832,7 +842,8 @@
void * ah_cls,
SelectCloseHandler ch,
void * ch_cls,
- unsigned int memory_quota) {
+ unsigned int memory_quota,
+ int socket_quota) {
SelectHandle * sh;
if ( (is_udp == NO) &&
@@ -877,6 +888,7 @@
sh->ch = ch;
sh->ch_cls = ch_cls;
sh->memory_quota = memory_quota;
+ sh->socket_quota = socket_quota;
sh->timeout = timeout;
sh->lock = MUTEX_CREATE(YES);
if (sock != -1)
@@ -1140,6 +1152,7 @@
sh->sessionArrayLength,
sh->sessionArrayLength + 4);
sh->sessions[sh->sessionCount++] = session;
+ sh->socket_quota--;
MUTEX_UNLOCK(sh->lock);
signalSelect(sh);
return OK;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r5242 - in GNUnet/src: include server transports util/network,
gnunet <=