gnunet-svn
[Top][All Lists]
Advanced

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

[libmicrohttpd] 05/09: test_upgrade: set TCP_NODELAY unconditionally on


From: gnunet
Subject: [libmicrohttpd] 05/09: test_upgrade: set TCP_NODELAY unconditionally on used sockets
Date: Fri, 24 Nov 2023 19:54:00 +0100

This is an automated email from the git hooks/post-receive script.

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit 53e1e4864887512f39e964fc57c3b9f83d04a489
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Mon Oct 23 20:52:01 2023 +0300

    test_upgrade: set TCP_NODELAY unconditionally on used sockets
---
 src/microhttpd/test_upgrade.c | 88 ++++++++++++++++++++++++++++++-------------
 1 file changed, 61 insertions(+), 27 deletions(-)

diff --git a/src/microhttpd/test_upgrade.c b/src/microhttpd/test_upgrade.c
index d62ef7fd..ed4275c7 100644
--- a/src/microhttpd/test_upgrade.c
+++ b/src/microhttpd/test_upgrade.c
@@ -262,6 +262,62 @@ gnutlscli_connect (int *sock,
 #endif /* HTTPS_SUPPORT && HAVE_FORK && HAVE_WAITPID */
 
 
+/**
+ * Change socket to blocking.
+ *
+ * @param fd the socket to manipulate
+ */
+static void
+make_blocking (MHD_socket fd)
+{
+#if defined(MHD_POSIX_SOCKETS)
+  int flags;
+
+  flags = fcntl (fd, F_GETFL);
+  if (-1 == flags)
+    externalErrorExitDesc ("fcntl() failed");
+  if ((flags & ~O_NONBLOCK) != flags)
+    if (-1 == fcntl (fd, F_SETFL, flags & ~O_NONBLOCK))
+      externalErrorExitDesc ("fcntl() failed");
+#elif defined(MHD_WINSOCK_SOCKETS)
+  unsigned long flags = 0;
+
+  if (0 != ioctlsocket (fd, (int) FIONBIO, &flags))
+    externalErrorExitDesc ("ioctlsocket() failed");
+#endif /* MHD_WINSOCK_SOCKETS */
+}
+
+
+/**
+ * Enable TCP_NODELAY on TCP/IP socket.
+ *
+ * @param fd the socket to manipulate
+ */
+static void
+make_nodelay (MHD_socket fd)
+{
+#ifdef TCP_NODELAY
+  const MHD_SCKT_OPT_BOOL_ on_val = 1;
+
+  if (0 == setsockopt (fd,
+                       IPPROTO_TCP,
+                       TCP_NODELAY,
+                       (const void *) &on_val,
+                       sizeof (on_val)))
+    return; /* Success exit point */
+
+#ifndef MHD_WINSOCK_SOCKETS
+  fprintf (stderr, "Failed to enable TCP_NODELAY on socket (ignored). "
+           "errno: %d (%s)\n", (int) errno, strerror (errno));
+#else /* MHD_WINSOCK_SOCKETS */
+  fprintf (stderr, "Failed to enable TCP_NODELAY on socket (ignored). "
+           "WSAGetLastError() value: %d\n", (int) WSAGetLastError ());
+#endif /* MHD_WINSOCK_SOCKETS */
+  fflush (stderr);
+#endif /* TCP_NODELAY */
+}
+
+
 /**
  * Wrapper structure for plain&TLS sockets
  */
@@ -323,7 +379,10 @@ wr_create_plain_sckt (void)
   s->t = wr_plain;
   s->fd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (MHD_INVALID_SOCKET != s->fd)
+  {
+    make_nodelay (s->fd);
     return s; /* Success */
+  }
   testErrorLogDesc ("socket() failed");
   free (s);
   return NULL;
@@ -349,6 +408,7 @@ wr_create_tls_sckt (void)
   s->fd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (MHD_INVALID_SOCKET != s->fd)
   {
+    make_nodelay (s->fd);
     if (GNUTLS_E_SUCCESS == gnutls_init (&(s->tls_s), GNUTLS_CLIENT))
     {
       if (GNUTLS_E_SUCCESS == gnutls_set_default_priority (s->tls_s))
@@ -409,6 +469,7 @@ wr_create_from_plain_sckt (MHD_socket plain_sk)
   }
   s->t = wr_plain;
   s->fd = plain_sk;
+  make_nodelay (s->fd);
   return s;
 }
 
@@ -761,33 +822,6 @@ notify_connection_cb (void *cls,
 }
 
 
-/**
- * Change socket to blocking.
- *
- * @param fd the socket to manipulate
- */
-static void
-make_blocking (MHD_socket fd)
-{
-#if defined(MHD_POSIX_SOCKETS)
-  int flags;
-
-  flags = fcntl (fd, F_GETFL);
-  if (-1 == flags)
-    externalErrorExitDesc ("fcntl() failed");
-  if ((flags & ~O_NONBLOCK) != flags)
-    if (-1 == fcntl (fd, F_SETFL, flags & ~O_NONBLOCK))
-      externalErrorExitDesc ("fcntl() failed");
-#elif defined(MHD_WINSOCK_SOCKETS)
-  unsigned long flags = 0;
-
-  if (0 != ioctlsocket (fd, (int) FIONBIO, &flags))
-    externalErrorExitDesc ("ioctlsocket() failed");
-#endif /* MHD_WINSOCK_SOCKETS */
-
-}
-
-
 static void
 send_all (struct wr_socket *sock,
           const void *data,

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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