diff options
author | Vincent Richard <[email protected]> | 2014-01-06 20:30:43 +0000 |
---|---|---|
committer | Vincent Richard <[email protected]> | 2014-01-06 20:30:43 +0000 |
commit | fa399699d5523e4cb319ed870d2e58612379b799 (patch) | |
tree | 4a40888e9b6ae316b5d348456e11a4446fadb8ec | |
parent | Check for NULL progress listener. (diff) | |
download | vmime-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.cpp | 12 |
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; } |