gnunet-svn
[Top][All Lists]
Advanced

[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;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]