Index: src/tls/OFOpenSSLTLSStream.m ================================================================== --- src/tls/OFOpenSSLTLSStream.m +++ src/tls/OFOpenSSLTLSStream.m @@ -124,11 +124,11 @@ } } ret = SSL_read_ex(_SSL, buffer, length, &bytesRead); - if (BIO_ctrl_pending(_writeBIO) > 0) { + while (BIO_ctrl_pending(_writeBIO) > 0) { int tmp = BIO_read(_writeBIO, _buffer, bufferSize); OFEnsure(tmp >= 0); [_underlyingStream writeBuffer: _buffer length: tmp]; @@ -176,11 +176,11 @@ requestedLength: length bytesWritten: bytesWritten errNo: errNo]; } - if (BIO_ctrl_pending(_writeBIO) > 0) { + while (BIO_ctrl_pending(_writeBIO) > 0) { int tmp = BIO_read(_writeBIO, _buffer, bufferSize); OFEnsure(tmp >= 0); [_underlyingStream writeBuffer: _buffer length: tmp]; @@ -256,11 +256,11 @@ errorCode: initFailedErrorCode]; } status = SSL_do_handshake(_SSL); - if (BIO_ctrl_pending(_writeBIO) > 0) { + while (BIO_ctrl_pending(_writeBIO) > 0) { int tmp = BIO_read(_writeBIO, _buffer, bufferSize); OFEnsure(tmp >= 0); [_underlyingStream writeBuffer: _buffer length: tmp]; @@ -315,11 +315,11 @@ OFEnsure(BIO_write(_readBIO, buffer, (int)length) == (int)length); status = SSL_do_handshake(_SSL); - if (BIO_ctrl_pending(_writeBIO) > 0) { + while (BIO_ctrl_pending(_writeBIO) > 0) { int tmp = BIO_read(_writeBIO, buffer, bufferSize); OFEnsure(tmp >= 0); [_underlyingStream writeBuffer: _buffer length: tmp]; @@ -369,11 +369,11 @@ static const OFTLSStreamErrorCode unknownErrorCode = OFTLSStreamErrorCodeUnknown; int status; OFRunLoopMode runLoopMode; - if (BIO_ctrl_pending(_writeBIO) > 0) { + while (BIO_ctrl_pending(_writeBIO) > 0) { int tmp = BIO_read(_writeBIO, _buffer, bufferSize); OFEnsure(tmp >= 0); [_underlyingStream writeBuffer: _buffer length: tmp]; @@ -380,11 +380,11 @@ [_underlyingStream flushWriteBuffer]; } status = SSL_do_handshake(_SSL); - if (BIO_ctrl_pending(_writeBIO) > 0) { + while (BIO_ctrl_pending(_writeBIO) > 0) { int tmp = BIO_read(_writeBIO, _buffer, bufferSize); OFEnsure(tmp >= 0); [_underlyingStream writeBuffer: _buffer length: tmp];