53 #elif defined(MHD_TCP_CORK_NOPUSH)
84 _ (
"optlen invalid: %s\n"),
93 "The addresss pointed to by optval is not a valid part of the process address space: %s\n"),
101 _ (
"The option is unknown: %s\n"),
138 #elif defined(MHD_TCP_CORK_NOPUSH)
171 _ (
"optlen invalid: %s\n"),
180 "The addresss pointed to by optval is not a valid part of the process address space: %s\n"),
188 _ (
"The option is unknown: %s\n"),
205 if ( (! want_cork) &&
266 want_cork = (buffer_size <= 1024);
275 if (want_cork && ! have_cork)
277 gnutls_record_cork (connection->tls_session);
282 ret = gnutls_record_send (connection->tls_session,
285 if ( (GNUTLS_E_AGAIN == ret) ||
286 (GNUTLS_E_INTERRUPTED == ret) )
289 if (GNUTLS_E_AGAIN == ret)
306 if (! want_cork && have_cork)
308 (void) gnutls_record_uncork (connection->tls_session, 0);
349 else if (buffer_size > (
size_t) ret)
352 if (ret == buffer_size)
393 if ( (ret == header_size) &&
394 (0 == buffer_size) &&
397 (void) gnutls_record_uncork (connection->tls_session, 0);
403 #if defined(HAVE_SENDMSG) || defined(HAVE_WRITEV)
406 struct iovec vector[2];
412 vector[0].iov_base = (
void *) header;
413 vector[0].iov_len = header_size;
414 vector[1].iov_base = (
void *) buffer;
415 vector[1].iov_len = buffer_size;
421 memset (&msg, 0,
sizeof(
struct msghdr));
422 msg.msg_iov = vector;
431 iovcnt =
sizeof (vector) /
sizeof (
struct iovec);
432 ret = writev (s, vector, iovcnt);
438 if (ret == header_size + buffer_size)
455 #define MHD_SENFILE_CHUNK_ (0x20000)
460 #define MHD_SENFILE_CHUNK_THR_P_C_ (0x200000)
462 #ifdef HAVE_FREEBSD_SENDFILE
467 static int freebsd_sendfile_flags_;
472 static int freebsd_sendfile_flags_thd_p_c_;
477 #if defined(_MHD_HAVE_SENDFILE)
491 #ifndef HAVE_SENDFILE64
492 const uint64_t max_off_t = (uint64_t)
OFF_T_MAX;
494 const uint64_t max_off_t = (uint64_t) OFF64_T_MAX;
496 #ifdef MHD_LINUX_SOLARIS_SENDFILE
497 #ifndef HAVE_SENDFILE64
503 #ifdef HAVE_FREEBSD_SENDFILE
507 #ifdef HAVE_DARWIN_SENDFILE
514 size_t send_size = 0;
515 mhd_assert (MHD_resp_sender_sendfile == connection->resp_sender);
524 send_size = (left > chunk_size) ? chunk_size : (
size_t) left;
525 if (max_off_t < offsetu64)
527 connection->resp_sender = MHD_resp_sender_std;
530 #ifdef MHD_LINUX_SOLARIS_SENDFILE
531 #ifndef HAVE_SENDFILE64
532 offset = (off_t) offsetu64;
538 offset = (off64_t) offsetu64;
557 #ifdef HAVE_LINUX_SENDFILE
565 connection->resp_sender = MHD_resp_sender_std;
568 if ( (EAFNOSUPPORT == err) ||
570 (EOPNOTSUPP == err) )
572 connection->resp_sender = MHD_resp_sender_std;
575 if ( (ENOTCONN == err) ||
584 else if (send_size > (
size_t) ret)
587 #elif defined(HAVE_FREEBSD_SENDFILE)
589 flags = used_thr_p_c ?
590 freebsd_sendfile_flags_thd_p_c_ : freebsd_sendfile_flags_;
592 if (0 != sendfile (file_fd,
607 return (ssize_t) sent_bytes;
613 connection->resp_sender = MHD_resp_sender_std;
618 ret = (ssize_t) sent_bytes;
619 #elif defined(HAVE_DARWIN_SENDFILE)
620 len = (off_t) send_size;
621 if (0 != sendfile (file_fd,
636 return (ssize_t) len;
640 if ((ENOTCONN == err) ||
643 if ((ENOTSUP == err) ||
644 (EOPNOTSUPP == err) )
647 connection->resp_sender = MHD_resp_sender_std;