diff options
author | Shane Kearns <shane.kearns@accenture.com> | 2011-03-08 15:41:59 (GMT) |
---|---|---|
committer | Shane Kearns <shane.kearns@accenture.com> | 2011-03-09 13:16:58 (GMT) |
commit | f89c25376651a87501e0c5980d289992b0fbe1c8 (patch) | |
tree | 977e8c0e3b165f6534e4d5470768795b2c1c8036 /src/network | |
parent | a99cc33345c32a7e210dbffa2c5c56ee13dd83c1 (diff) | |
download | Qt-f89c25376651a87501e0c5980d289992b0fbe1c8.zip Qt-f89c25376651a87501e0c5980d289992b0fbe1c8.tar.gz Qt-f89c25376651a87501e0c5980d289992b0fbe1c8.tar.bz2 |
Handle errors returned through select in the waitForXXX socket functions
Reviewed-by: Markus Goetz
Diffstat (limited to 'src/network')
-rw-r--r-- | src/network/socket/qsymbiansocketengine.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/network/socket/qsymbiansocketengine.cpp b/src/network/socket/qsymbiansocketengine.cpp index fa6aedd..ed7962c 100644 --- a/src/network/socket/qsymbiansocketengine.cpp +++ b/src/network/socket/qsymbiansocketengine.cpp @@ -1141,6 +1141,9 @@ int QSymbianSocketEnginePrivate::nativeSelect(int timeout, bool checkRead, bool //restart asynchronous notifier (only one IOCTL allowed at a time) if (asyncSelect) asyncSelect->IssueRequest(); +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEnginePrivate::nativeSelect: select timeout"; +#endif return 0; //timeout } else { selectTimer.Cancel(); @@ -1148,11 +1151,20 @@ int QSymbianSocketEnginePrivate::nativeSelect(int timeout, bool checkRead, bool } } +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEnginePrivate::nativeSelect: select status" << selectStat.Int() << (int)selectFlags(); +#endif if (selectStat != KErrNone) return selectStat.Int(); if (selectFlags() & KSockSelectExcept) { TInt err; nativeSocket.GetOpt(KSOSelectLastError, KSOLSocket, err); +#ifdef QNATIVESOCKETENGINE_DEBUG + qDebug() << "QSymbianSocketEnginePrivate::nativeSelect: select last error" << err; +#endif + //TODO: avoidable cast? + //set the error here, because read won't always return the same error again as select. + const_cast<QSymbianSocketEnginePrivate*>(this)->setError(err); //restart asynchronous notifier (only one IOCTL allowed at a time) if (asyncSelect) asyncSelect->IssueRequest(); //TODO: in error case should we restart or not? @@ -1381,6 +1393,7 @@ void QSymbianSocketEnginePrivate::setError(TInt symbianError) switch (symbianError) { case KErrDisconnected: case KErrEof: + case KErrConnectionTerminated: //interface stopped externally - RConnection::Stop(EStopAuthoritative) setError(QAbstractSocket::RemoteHostClosedError, QSymbianSocketEnginePrivate::RemoteHostClosedErrorString); break; |