aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Richard <[email protected]>2014-01-06 20:30:43 +0000
committerVincent Richard <[email protected]>2014-01-06 20:30:43 +0000
commitfa399699d5523e4cb319ed870d2e58612379b799 (patch)
tree4a40888e9b6ae316b5d348456e11a4446fadb8ec
parentCheck for NULL progress listener. (diff)
downloadvmime-fa399699d5523e4cb319ed870d2e58612379b799.tar.gz
vmime-fa399699d5523e4cb319ed870d2e58612379b799.zip
Use non-blocking send in GNU TLS push callback.
-rw-r--r--src/vmime/net/tls/gnutls/TLSSocket_GnuTLS.cpp12
1 files 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 <const byte_t*>(data), len);
+ const ssize_t ret = static_cast <ssize_t>
+ (sok->m_wrapped->sendRawNonBlocking
+ (reinterpret_cast <const byte_t*>(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;
}