libmicrohttpd

HTTP/1.x server C library (MHD 1.x, stable)
Log | Files | Refs | Submodules | README | LICENSE

commit 68721add43db814d1bc69e6901684177c549dbbd
parent 497c1d68bee5b9acac92b8d92b12d6a284cc8399
Author: Christian Grothoff <christian@grothoff.org>
Date:   Thu, 25 Jul 2019 20:23:57 +0200

simplify

Diffstat:
Msrc/microhttpd/internal.h | 14++++----------
Msrc/microhttpd/mhd_send.c | 38+++++++++++++++++++++++---------------
2 files changed, 27 insertions(+), 25 deletions(-)

diff --git a/src/microhttpd/internal.h b/src/microhttpd/internal.h @@ -871,19 +871,13 @@ struct MHD_Connection /** * true if #socket_fd is non-blocking, false otherwise. */ - bool sk_nonblck; + bool sk_nonblck; // FIXME: hopefully dead? /** - * Indicate whether connection socket has TCP_NODELAY turned on / Nagle’s algorithm turned off. - * TCP_NODELAY should not be turned on when TCP_CORK/TCP_NOPUSH is turned off. + * Indicate whether connection socket has TCP_CORK / Nagle’s algorithm turned on/off + * on this socket. */ - bool sk_tcp_nodelay_on; - - /** - * Indicate whether connection socket has TCP_CORK/TCP_NOPUSH turned on. - * TCP_CORK/TCP_NOPUSH should not be turned on when TCP_NODELAY is turned off. - */ - bool sk_tcp_cork_nopush_on; + bool sk_cork_on; /** * Has this socket been closed for reading (i.e. other side closed diff --git a/src/microhttpd/mhd_send.c b/src/microhttpd/mhd_send.c @@ -47,7 +47,19 @@ post_cork_setsockopt (struct MHD_Connection *connection, const MHD_SCKT_OPT_BOOL_ off_val = 0; const MHD_SCKT_OPT_BOOL_ on_val = 1; + if (connection->sk_cork_on == want_cork) + { + /* nothing to do, success! */ + return 0; + } + ret = -1; #if TCP_CORK + if (! want_cork) + ret = setsockopt (connection->socket_fd, + IPPROTO_TCP, + TCP_CORK, + &off_val, + sizeof (off_val)); #elif TCP_NODELAY ret = setsockopt (connection->socket_fd, IPPROTO_TCP, @@ -60,12 +72,10 @@ post_cork_setsockopt (struct MHD_Connection *connection, TCP_NOPUSH, (const void *) &on_val, sizeof (on_val)); -#else - ret = -1; #endif if (0 == ret) { - connection->sk_tcp_nodelay_on = false; + connection->sk_cork_on = want_cork; } return ret; } @@ -80,18 +90,20 @@ pre_cork_setsockopt (struct MHD_Connection *connection, const MHD_SCKT_OPT_BOOL_ on_val = 1; // if sk_tcp_nodelay_on is already what we pass in, return. - if (connection->sk_tcp_nodelay_on == want_cork) + if (connection->sk_cork_on == want_cork) { - return 0; // return type error + /* nothing to do, success! */ + return 0; } ret = -1; #if TCP_CORK - ret = setsockopt (connection->socket_fd, - IPPROTO_TCP, - TCP_CORK, - (const void *) want_cork ? &on_val : &off_val, - sizeof (on_val)); + if (want_cork) + ret = setsockopt (connection->socket_fd, + IPPROTO_TCP, + TCP_CORK, + (const void *) &on_val, + sizeof (on_val)); #elif TCP_NODELAY ret = setsockopt (connection->socket_fd, IPPROTO_TCP, @@ -108,11 +120,7 @@ pre_cork_setsockopt (struct MHD_Connection *connection, if (0 == ret) { -#if TCP_CORK || TCP_NODELAY - connection->sk_tcp_nodelay_on = true; -#elif TCP_NOPUSH - connection->sk_tcp_nodelay_on = false; -#endif + connection->sk_cork_on = want_cork; } return ret; }