diff options
Diffstat (limited to 'modules/extra/m_ssl.cpp')
-rw-r--r-- | modules/extra/m_ssl.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/modules/extra/m_ssl.cpp b/modules/extra/m_ssl.cpp index 85b99d119..44971908c 100644 --- a/modules/extra/m_ssl.cpp +++ b/modules/extra/m_ssl.cpp @@ -190,14 +190,37 @@ SSLSocketIO::SSLSocketIO() int SSLSocketIO::Recv(Socket *s, char *buf, size_t sz) { int i = SSL_read(this->sslsock, buf, sz); - TotalRead += i; + if (i > 0) + TotalRead += i; + else if (i < 0) + { + int err = SSL_get_error(this->sslsock, i); + switch (err) + { + case SSL_ERROR_WANT_READ: + case SSL_ERROR_WANT_WRITE: + SocketEngine::SetLastError(EAGAIN); + } + } + return i; } int SSLSocketIO::Send(Socket *s, const char *buf, size_t sz) { int i = SSL_write(this->sslsock, buf, sz); - TotalWritten += i; + if (i > 0) + TotalWritten += i; + else if (i < 0) + { + int err = SSL_get_error(this->sslsock, i); + switch (err) + { + case SSL_ERROR_WANT_READ: + case SSL_ERROR_WANT_WRITE: + SocketEngine::SetLastError(EAGAIN); + } + } return i; } |