commit e8258c92e6cd32f93f7a2b2c8b9605451e8113df parent 7ca70975abdb4a96a104a2b69ce5fe60535d50ba Author: Evgeny Grin (Karlson2k) <k2k@narod.ru> Date: Tue, 29 Dec 2020 15:39:21 +0300 Speed-up TLS handshake Diffstat:
| M | src/microhttpd/connection_https.c | | | 10 | ++++++++++ |
1 file changed, 10 insertions(+), 0 deletions(-)
diff --git a/src/microhttpd/connection_https.c b/src/microhttpd/connection_https.c @@ -33,6 +33,7 @@ #include "response.h" #include "mhd_mono_clock.h" #include <gnutls/gnutls.h> +#include "mhd_send.h" /** @@ -107,6 +108,15 @@ MHD_run_tls_handshake_ (struct MHD_Connection *connection) if ((MHD_TLS_CONN_INIT == connection->tls_state) || (MHD_TLS_CONN_HANDSHAKING == connection->tls_state)) { + /* GnuTLS uses sendmsg() (when available) to combine outgoing message + * into the single packet therefore there is no need to wait for + * additional data after sendmsg(). TLS handshake requires several packets + * exchange so set TCP_NODELAY here to avoid delay after each outgoing + * packet. As drawback it results in less more packet fragmentation + * on platforms without sendmsg() support, but luckily such platforms + * are now rare and they don't provide best performance anyway. */ + if (_MHD_ON != connection->sk_nodelay) + MHD_connection_set_nodelay_state_ (connection, true); ret = gnutls_handshake (connection->tls_session); if (ret == GNUTLS_E_SUCCESS) {