gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r21607 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r21607 - gnunet/src/util
Date: Sun, 27 May 2012 23:11:29 +0200

Author: grothoff
Date: 2012-05-27 23:11:29 +0200 (Sun, 27 May 2012)
New Revision: 21607

Modified:
   gnunet/src/util/server.c
Log:
use GNUNET_SCHEDULER_add_read_net_with_priority instead of constructing fd sets 
in server with only one active listen socket

Modified: gnunet/src/util/server.c
===================================================================
--- gnunet/src/util/server.c    2012-05-27 21:10:58 UTC (rev 21606)
+++ gnunet/src/util/server.c    2012-05-27 21:11:29 UTC (rev 21607)
@@ -330,27 +330,66 @@
  * @param tc reason why we are running right now
  */
 static void
+process_listen_socket (void *cls, const struct GNUNET_SCHEDULER_TaskContext 
*tc);
+
+
+/**
+ * Add a listen task with the scheduler for this server.
+ *
+ * @param server handle to our server for which we are adding the listen
+ *        socket
+ */
+static void
+schedule_listen_task (struct GNUNET_SERVER_Handle *server)
+{
+  struct GNUNET_NETWORK_FDSet *r;
+  unsigned int i;
+
+  if (NULL == server->listen_sockets[0])
+    return; /* nothing to do, no listen sockets! */
+  if (NULL == server->listen_sockets[1])
+  {
+    /* simplified method: no fd set needed; this is then much simpler and
+       much more efficient */
+    server->listen_task =
+      GNUNET_SCHEDULER_add_read_net_with_priority 
(GNUNET_TIME_UNIT_FOREVER_REL,
+                                                  
GNUNET_SCHEDULER_PRIORITY_HIGH,
+                                                  server->listen_sockets[0],
+                                                  &process_listen_socket, 
server);
+    return;
+  }
+  r = GNUNET_NETWORK_fdset_create ();
+  i = 0;
+  while (NULL != server->listen_sockets[i])
+    GNUNET_NETWORK_fdset_set (r, server->listen_sockets[i++]);
+  server->listen_task =
+    GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
+                                GNUNET_TIME_UNIT_FOREVER_REL, r, NULL,
+                                &process_listen_socket, server);
+  GNUNET_NETWORK_fdset_destroy (r);
+}
+
+
+/**
+ * Scheduler says our listen socket is ready.  Process it!
+ *
+ * @param cls handle to our server for which we are processing the listen
+ *        socket
+ * @param tc reason why we are running right now
+ */
+static void
 process_listen_socket (void *cls, const struct GNUNET_SCHEDULER_TaskContext 
*tc)
 {
   struct GNUNET_SERVER_Handle *server = cls;
   struct GNUNET_CONNECTION_Handle *sock;
   struct GNUNET_SERVER_Client *client;
-  struct GNUNET_NETWORK_FDSet *r;
   unsigned int i;
 
   server->listen_task = GNUNET_SCHEDULER_NO_TASK;
-  r = GNUNET_NETWORK_fdset_create ();
-  i = 0;
-  while (NULL != server->listen_sockets[i])
-    GNUNET_NETWORK_fdset_set (r, server->listen_sockets[i++]);
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
   {
     /* ignore shutdown, someone else will take care of it! */
-    server->listen_task =
-        GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
-                                     GNUNET_TIME_UNIT_FOREVER_REL, r, NULL,
-                                     &process_listen_socket, server);
-    GNUNET_NETWORK_fdset_destroy (r);
+    schedule_listen_task (server);
     return;
   }
   i = 0;
@@ -373,11 +412,7 @@
     i++;
   }
   /* listen for more! */
-  server->listen_task =
-      GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
-                                   GNUNET_TIME_UNIT_FOREVER_REL, r, NULL,
-                                   &process_listen_socket, server);
-  GNUNET_NETWORK_fdset_destroy (r);
+  schedule_listen_task (server);
 }
 
 
@@ -501,8 +536,6 @@
                                    int require_found)
 {
   struct GNUNET_SERVER_Handle *server;
-  struct GNUNET_NETWORK_FDSet *r;
-  int i;
 
   server = GNUNET_malloc (sizeof (struct GNUNET_SERVER_Handle));
   server->idle_timeout = idle_timeout;
@@ -511,17 +544,7 @@
   server->access_cls = access_cls;
   server->require_found = require_found;
   if (NULL != lsocks)
-  {
-    r = GNUNET_NETWORK_fdset_create ();
-    i = 0;
-    while (NULL != server->listen_sockets[i])
-      GNUNET_NETWORK_fdset_set (r, server->listen_sockets[i++]);
-    server->listen_task =
-        GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH,
-                                     GNUNET_TIME_UNIT_FOREVER_REL, r, NULL,
-                                     &process_listen_socket, server);
-    GNUNET_NETWORK_fdset_destroy (r);
-  }
+    schedule_listen_task (server);
   return server;
 }
 




reply via email to

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