diff options
author | Benoit Foucher <benoit@zeroc.com> | 2019-08-22 16:11:32 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2019-08-22 16:11:32 +0200 |
commit | e27df63b4c9415c1cc78b526d3b40d60a80fe3d6 (patch) | |
tree | 1ad4a9cf8f62e335d931bc1500a6cd395fd7d16e /cpp/src/IceSSL/OpenSSLTransceiverI.cpp | |
parent | Java logger uses Ice.ProgramName for prefix now. Fixes #488 (diff) | |
download | ice-e27df63b4c9415c1cc78b526d3b40d60a80fe3d6.tar.bz2 ice-e27df63b4c9415c1cc78b526d3b40d60a80fe3d6.tar.xz ice-e27df63b4c9415c1cc78b526d3b40d60a80fe3d6.zip |
Workaround for AIX issue with SSL_write and EWOULDBLOCK
Diffstat (limited to 'cpp/src/IceSSL/OpenSSLTransceiverI.cpp')
-rw-r--r-- | cpp/src/IceSSL/OpenSSLTransceiverI.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/cpp/src/IceSSL/OpenSSLTransceiverI.cpp b/cpp/src/IceSSL/OpenSSLTransceiverI.cpp index d33bb6aaf52..2050f304a0f 100644 --- a/cpp/src/IceSSL/OpenSSLTransceiverI.cpp +++ b/cpp/src/IceSSL/OpenSSLTransceiverI.cpp @@ -443,6 +443,21 @@ OpenSSL::TransceiverI::write(IceInternal::Buffer& buf) if(ret <= 0) { +#if defined(_AIX) + // + // WORKAROUND: OpenSSL SSL_write on AIX sometime ends up reporting a error + // with SSL_get_error but there's no error in the error queue. This occurs + // when SSL_write can't write more data. So we just return SocketOperationWrite + // in this case. + // + if(SSL_get_error(_ssl, ret) == SSL_ERROR_SSL && ERR_peek_error() == 0) + { + if(SSL_want_write(_ssl)) + { + return IceInternal::SocketOperationWrite; + } + } +#endif switch(SSL_get_error(_ssl, ret)) { case SSL_ERROR_NONE: |