From 42e98f38c6fa85d953f275c8d9a693bc77fee7cf Mon Sep 17 00:00:00 2001 From: ng0 Date: Tue, 23 Jul 2019 10:26:55 +0000 Subject: [PATCH] start SENDMSG/WRITEV. --- src/microhttpd/mhd_send.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/microhttpd/mhd_send.c b/src/microhttpd/mhd_send.c index 210ad658..0de40a42 100644 --- a/src/microhttpd/mhd_send.c +++ b/src/microhttpd/mhd_send.c @@ -327,7 +327,7 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection, const char *buffer, size_t buffer_size) { -#if HAVE_WRITEV +#if defined(HAVE_SENDMSG) || defined(HAVE_WRITEV) MHD_socket s = connection->socket_fd; bool have_cork; bool have_more; @@ -363,9 +363,16 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection, vector[0].iov_len = strlen (header); vector[1].iov_base = buffer; vector[1].iov_len = strlen (buffer); + +#if HAVE_SENDMSG + struct msghdr msg; + msg.msg_iov = vector; + memset(&msg, 0, sizeof(buffer + header)); + ret = sendmsg (s, vector, MAYBE_MSG_NOSIGNAL); +#elif HAVE_WRITEV iovcnt = sizeof (vector) / sizeof (struct iovec); - // FIXME: maybe use sendmsg() if available instead! - ret = writev (connection->socket_fd, vector, iovcnt); + ret = writev (s, vector, iovcnt); +#endif #if TCP_CORK if (use_corknopush) @@ -418,3 +425,12 @@ MHD_send_on_connection2_ (struct MHD_Connection *connection, MHD_SSO_HDR_CORK); #endif } + +ssize_t +MHD_sendfile_on_connection_ (struct MHD_Connection *connection, + const char *buffer, + size_t buffer_size, + enum MHD_SendSocketOptions options) +{ + // TODO +}