static ssize_t
_gnutls_writev(gnutls_session_t session, const giovec_t * giovec,
- unsigned giovec_cnt)
+ int giovec_cnt)
{
int i;
- bool is_dtls = IS_DTLS(session);
- bool no_writev = 0;
gnutls_transport_ptr_t fd = session->internals.transport_send_ptr;
reset_errno(session);
- /* In DTLS we use writev() only when the total sum is less than
- * the MTU. */
-
- if (is_dtls && giovec_cnt > 1) {
- unsigned sum = 0, j;
- for (j = 0; j < giovec_cnt; j++) {
- sum += giovec[j].iov_len;
- }
-
- if (sum > session->internals.dtls.mtu) {
- no_writev = 1;
- }
- }
-
- if (session->internals.push_func != NULL || no_writev != 0)
+ if (session->internals.push_func != NULL)
i = _gnutls_writev_emu(session, fd, giovec, giovec_cnt);
else
i = session->internals.vec_push_func(fd, giovec,
int err = get_errno(session);
_gnutls_debug_log("errno: %d\n", err);
- return errno_to_gerr(err, is_dtls);
+ return errno_to_gerr(err, IS_DTLS(session));
}
return i;
}
#ifdef HAVE_WRITEV
gnutls_transport_set_vec_push_function(*session, system_writev);
-#endif
+#else
gnutls_transport_set_push_function(*session, system_write);
+#endif
(*session)->internals.pull_timeout_func = system_recv_timeout;
(*session)->internals.pull_func = system_read;
(*session)->internals.errno_func = system_errno;
/* System specific function wrappers.
*/
-ssize_t
-system_write(gnutls_transport_ptr ptr, const void *data, size_t data_size)
-{
- return send(GNUTLS_POINTER_TO_INT(ptr), data, data_size, 0);
-}
-
#ifdef _WIN32
/* Do not use the gnulib functions for sending and receiving data.
* Using them makes gnutls only working with gnulib applications.
return ret;
}
+ssize_t
+system_write(gnutls_transport_ptr ptr, const void *data, size_t data_size)
+{
+ return send(GNUTLS_POINTER_TO_INT(ptr), data, data_size, 0);
+}
#else /* POSIX */
int system_errno(gnutls_transport_ptr_t ptr)
{
int system_errno(gnutls_transport_ptr_t);
int system_recv_timeout(gnutls_transport_ptr_t ptr, unsigned int ms);
+#ifdef _WIN32
ssize_t system_write(gnutls_transport_ptr_t ptr, const void *data,
size_t data_size);
-#ifndef _WIN32
+#else
#define HAVE_WRITEV
ssize_t system_writev(gnutls_transport_ptr_t ptr, const giovec_t * iovec,
int iovec_cnt);