commit 2e40251a934933f35413ea3ef978656f2eb0730a
parent d71df0f08b6cdf2e57739fc48b1420aa9a2a5cd7
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
Date: Wed, 17 Mar 2021 20:55:33 +0300
Added MHD_OPTION_SIGPIPE_HANDLED_BY_APP option
Diffstat:
2 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/src/include/microhttpd.h b/src/include/microhttpd.h
@@ -135,7 +135,7 @@ typedef intptr_t ssize_t;
* they are parsed as decimal numbers.
* Example: 0x01093001 = 1.9.30-1.
*/
-#define MHD_VERSION 0x00097204
+#define MHD_VERSION 0x00097205
/**
* Operational results from MHD calls.
@@ -1732,7 +1732,18 @@ enum MHD_OPTION
* This argument must be followed by an "unsigned int", corresponding
* to an `enum MHD_DisableSanityCheck`.
*/
- MHD_OPTION_SERVER_INSANITY = 32
+ MHD_OPTION_SERVER_INSANITY = 32,
+
+ /**
+ * If followed by value '1' informs MHD that SIGPIPE is suppressed or
+ * handled by application. Allows MHD to use network functions that could
+ * generate SIGPIPE, like `sendfile()`.
+ * Valid only for daemons without #MHD_USE_INTERNAL_POLLING_THREAD as
+ * MHD automatically suppresses SIGPIPE for threads started by MHD.
+ * This option should be followed by an `int` argument.
+ * @note Available since #MHD_VERSION 0x00097205
+ */
+ MHD_OPTION_SIGPIPE_HANDLED_BY_APP = 33
};
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
@@ -5849,6 +5849,7 @@ parse_options_va (struct MHD_Daemon *daemon,
break;
/* all options taking 'int' */
case MHD_OPTION_STRICT_FOR_CLIENT:
+ case MHD_OPTION_SIGPIPE_HANDLED_BY_APP:
if (MHD_NO == parse_options (daemon,
servaddr,
opt,
@@ -5927,6 +5928,16 @@ parse_options_va (struct MHD_Daemon *daemon,
return MHD_NO;
#endif
#endif /* HTTPS_SUPPORT */
+ case MHD_OPTION_SIGPIPE_HANDLED_BY_APP:
+ if (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD))
+ daemon->sigpipe_blocked = ( (va_arg (ap,
+ int)) != 0);
+ else
+ {
+ (void) va_arg (ap,
+ int);
+ }
+ break;
default:
#ifdef HAVE_MESSAGES
if ( ( (opt >= MHD_OPTION_HTTPS_MEM_KEY) &&