summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-08-01 20:50:35 +0200
committerChristian Grothoff <christian@grothoff.org>2019-08-01 20:50:35 +0200
commit4b62caead6edb2d4b75ef1c99e653d4b30ac9007 (patch)
tree638495493e23a72ddf760d2e372ea4cb80b0c781
parentc5081fb276b52fc9d48b9ba441686727eafaaad8 (diff)
toggle Naggle if and only if corking is not possible by other means
-rw-r--r--src/microhttpd/mhd_send.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/microhttpd/mhd_send.c b/src/microhttpd/mhd_send.c
index 9b07115c..5fed8767 100644
--- a/src/microhttpd/mhd_send.c
+++ b/src/microhttpd/mhd_send.c
@@ -90,6 +90,19 @@ pre_cork_setsockopt (struct MHD_Connection *connection,
/* any others? man page does not list more... */
break;
}
+#else
+ /* CORK/NOPUSH/MSG_MORE do not exist on this platform,
+ so we must toggle Naggle's algorithm on/off instead
+ (otherwise we keep it always off) */
+ if (connection->sk_cork_on == want_cork)
+ {
+ /* nothing to do, success! */
+ return;
+ }
+ if ( (want_cork) &&
+ (0 == MHD_socket_set_nodelay (connection->socket_fd,
+ false)) )
+ connection->sk_cork_on = true;
#endif
}
@@ -148,6 +161,19 @@ post_cork_setsockopt (struct MHD_Connection *connection,
/* any others? man page does not list more... */
break;
}
+#else
+ /* CORK/NOPUSH/MSG_MORE do not exist on this platform,
+ so we must toggle Naggle's algorithm on/off instead
+ (otherwise we keep it always off) */
+ if (connection->sk_cork_on == want_cork)
+ {
+ /* nothing to do, success! */
+ return;
+ }
+ if ( (! want_cork) &&
+ (0 == MHD_socket_set_nodelay (connection->socket_fd,
+ true)) )
+ connection->sk_cork_on = false;
#endif
}