From 66cc965fd736a7785247a6c058c4bfacfe5ea02f Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 5 Feb 2014 15:26:03 -0500 Subject: Ignore nonblocking errnors on socket operations --- modules/extra/m_ssl.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'modules/extra') 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; } -- cgit