summaryrefslogtreecommitdiff
path: root/modules/extra/m_ssl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/extra/m_ssl.cpp')
-rw-r--r--modules/extra/m_ssl.cpp27
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;
}