diff options
author | Peter Hartmann <peter.hartmann@nokia.com> | 2010-07-12 16:32:06 (GMT) |
---|---|---|
committer | Samuli Piippo <samuli.piippo@digia.com> | 2011-06-09 10:06:51 (GMT) |
commit | e5f73c552c3ccffc5a1dae959d81cba5b03a916a (patch) | |
tree | 3a29fa717a5540ff3ef86190d60ff980bb64db5e | |
parent | e0328b8e8d50868fb35398f15a1882aa42343deb (diff) | |
download | Qt-e5f73c552c3ccffc5a1dae959d81cba5b03a916a.zip Qt-e5f73c552c3ccffc5a1dae959d81cba5b03a916a.tar.gz Qt-e5f73c552c3ccffc5a1dae959d81cba5b03a916a.tar.bz2 |
QSslSocket: Improve error handling
Reviewed-by: Markus Goetz
Task-number: QT-3567
(cherry picked from commit c25c7c9bdfade6b906f37ac8bad44f6f0de57597)
(cherry picked from commit 151983bd827c8a05b8798560ade4d911a04156c3)
-rw-r--r-- | src/network/ssl/qsslsocket_openssl.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index ef3cf63..02de9c3 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -680,8 +680,20 @@ void QSslSocketBackendPrivate::transmit() #endif plainSocket->disconnectFromHost(); break; + case SSL_ERROR_SYSCALL: // some IO error + case SSL_ERROR_SSL: // error in the SSL library + // we do not know exactly what the error is, nor whether we can recover from it, + // so just return to prevent an endless loop in the outer "while" statement + q->setErrorString(QSslSocket::tr("Error while reading: %1").arg(SSL_ERRORSTR())); + q->setSocketError(QAbstractSocket::UnknownSocketError); + emit q->error(QAbstractSocket::UnknownSocketError); + return; default: - // ### Handle errors better. + // SSL_ERROR_WANT_CONNECT, SSL_ERROR_WANT_ACCEPT: can only happen with a + // BIO_s_connect() or BIO_s_accept(), which we do not call. + // SSL_ERROR_WANT_X509_LOOKUP: can only happen with a + // SSL_CTX_set_client_cert_cb(), which we do not call. + // So this default case should never be triggered. q->setErrorString(QSslSocket::tr("Error while reading: %1").arg(SSL_ERRORSTR())); q->setSocketError(QAbstractSocket::UnknownSocketError); emit q->error(QAbstractSocket::UnknownSocketError); |