From 53f81ac946d69bcd68a02620bf52dc42fcdcc506 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Wed, 19 Feb 2014 12:15:00 +0100 Subject: 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 Reviewed-by: Rafael Roquetto Reviewed-by: Fanda Vacek Reviewed-by: Bernd Weimer Reviewed-by: Richard J. Moore --- src/network/socket/qnativesocketengine_unix.cpp | 48 +++++++++++++++++++++++++ 1 file changed, 48 insertions(+) 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 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 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 -- cgit v1.2.3