From fa399699d5523e4cb319ed870d2e58612379b799 Mon Sep 17 00:00:00 2001 From: Vincent Richard Date: Mon, 6 Jan 2014 21:30:43 +0100 Subject: [PATCH] Use non-blocking send in GNU TLS push callback. --- src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp b/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp index 18ea352d..edc8811a 100644 --- a/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp +++ b/src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp @@ -307,8 +307,14 @@ ssize_t TLSSocket_GnuTLS::gnutlsPushFunc try { - sok->m_wrapped->sendRaw - (reinterpret_cast (data), len); + const ssize_t ret = static_cast + (sok->m_wrapped->sendRawNonBlocking + (reinterpret_cast (data), len)); + + if (ret == 0 && sok->m_wrapped->getStatus() & socket::STATUS_WOULDBLOCK) + return GNUTLS_E_AGAIN; + + return ret; } catch (exception& e) { @@ -317,8 +323,6 @@ ssize_t TLSSocket_GnuTLS::gnutlsPushFunc sok->m_ex = e.clone(); return -1; } - - return len; }