use nodelay for a MAJOR performance boost for GNUnet code
authorChristian Grothoff <christian@grothoff.org>
Sat, 17 Oct 2009 21:20:13 +0000 (21:20 +0000)
committerChristian Grothoff <christian@grothoff.org>
Sat, 17 Oct 2009 21:20:13 +0000 (21:20 +0000)
src/util/network.c

index 5ba849138039aac36b079c8c7ccfbf7f3cf27fdd..07364a36b8b9e99b9fa090f01daf43a592aef951 100644 (file)
@@ -124,6 +124,23 @@ socket_set_inheritable (const struct GNUNET_NETWORK_Handle
 \r
 \r
 \r
+/**\r
+ * Disable delays when sending data via the socket.\r
+ * (GNUnet makes sure that messages are as big as\r
+ * possible already).\r
+ *\r
+ * @param h the socket to make non-delaying\r
+ */\r
+static void\r
+socket_set_nodelay (const struct GNUNET_NETWORK_Handle\r
+                   *h)\r
+{\r
+  int value = 1;\r
+  setsockopt (h->fd, IPPROTO_TCP, TCP_NODELAY, &value, sizeof(value));\r
+}\r
+\r
+\r
+\r
 /**\r
  * accept a new connection on a socket\r
  *\r
@@ -170,6 +187,7 @@ GNUNET_NETWORK_socket_accept (const struct GNUNET_NETWORK_Handle *desc,
     GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,\r
                         "socket_set_inheritable");\r
 #endif\r
+  socket_set_nodelay (ret);\r
   return ret;\r
 }\r
 \r
@@ -476,6 +494,8 @@ GNUNET_NETWORK_socket_create (int domain, int type, int protocol)
     GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,\r
                         "socket_set_inheritable");\r
 #endif\r
+  if (type == SOCK_STREAM)\r
+    socket_set_nodelay (ret);\r
 \r
   return ret;\r
 }\r