summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Hartmann <phartmann@blackberry.com>2014-02-19 12:15:00 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-20 19:01:53 +0100
commit53f81ac946d69bcd68a02620bf52dc42fcdcc506 (patch)
treedfdfa4a6abbc780973669c8b11ce19cc4e58fe13
parentba4d1547372b7f3c1d7d4ea1cbf6785cfca90755 (diff)
BlackBerry networking: call special select() method
... so that the socket notifiers are enabled after selecting and thus emit signals even after selecting (select() is called e.g. by the waitFor* methods). Task-number: QTBUG-36144 Change-Id: I385f288e8c42f92a9c84e53bce843e52f8094ada Reviewed-by: Kevin Krammer <kevin.krammer@kdab.com> Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com> Reviewed-by: Fanda Vacek <fvacek@blackberry.com> Reviewed-by: Bernd Weimer <bweimer@blackberry.com> Reviewed-by: Richard J. Moore <rich@kde.org>
-rw-r--r--src/network/socket/qnativesocketengine_unix.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/network/socket/qnativesocketengine_unix.cpp b/src/network/socket/qnativesocketengine_unix.cpp
index b1b19528c2..6ee8b696df 100644
--- a/src/network/socket/qnativesocketengine_unix.cpp
+++ b/src/network/socket/qnativesocketengine_unix.cpp
@@ -1120,6 +1120,53 @@ qint64 QNativeSocketEnginePrivate::nativeRead(char *data, qint64 maxSize)
return qint64(r);
}
+#ifdef Q_OS_BLACKBERRY
+int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool selectForRead) const
+{
+ fd_set fds;
+ FD_ZERO(&fds);
+ FD_SET(socketDescriptor, &fds);
+
+ int retval;
+ QList<QSocketNotifier *> notifiers;
+ if (selectForRead) {
+ notifiers << readNotifier;
+ retval = bb_select(notifiers, socketDescriptor + 1, &fds, 0, timeout);
+ } else {
+ notifiers << writeNotifier;
+ retval = bb_select(notifiers, socketDescriptor + 1, 0, &fds, timeout);
+ }
+
+ return retval;
+}
+
+int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool checkRead, bool checkWrite,
+ bool *selectForRead, bool *selectForWrite) const
+{
+ fd_set fdread;
+ FD_ZERO(&fdread);
+ if (checkRead)
+ FD_SET(socketDescriptor, &fdread);
+
+ fd_set fdwrite;
+ FD_ZERO(&fdwrite);
+ if (checkWrite)
+ FD_SET(socketDescriptor, &fdwrite);
+
+ QList<QSocketNotifier *> notifiers;
+ notifiers << readNotifier << writeNotifier;
+ int ret = bb_select(notifiers, socketDescriptor + 1, &fdread, &fdwrite, timeout);
+
+ if (ret <= 0)
+ return ret;
+ *selectForRead = FD_ISSET(socketDescriptor, &fdread);
+ *selectForWrite = FD_ISSET(socketDescriptor, &fdwrite);
+
+ return ret;
+}
+
+#else // not Q_OS_BLACKBERRY:
+
int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool selectForRead) const
{
fd_set fds;
@@ -1166,5 +1213,6 @@ int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool checkRead, bool c
return ret;
}
+#endif // Q_OS_BLACKBERRY
QT_END_NAMESPACE