macOS: Notify socket notifier on connection error
Enable kCFSocketConnectCallBack to get connection made/failed notifications. For the error case, the data pointer will be set (it points to an int with the error code). Change-Id: Ib51c0ae7c2c74d7bc2fea3c8b7aa9033a860f602 Fixes: QTBUG-91619 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> Reviewed-by: Paul Wicking <paul.wicking@qt.io> Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> (cherry picked from commit d492245d9f98e410e1748f28a598945244dbafa8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
9d0bd169bb
commit
72c609203b
@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE
|
||||
Socket Notifiers
|
||||
*************************************************************************/
|
||||
void qt_mac_socket_callback(CFSocketRef s, CFSocketCallBackType callbackType, CFDataRef,
|
||||
const void *, void *info)
|
||||
const void *data, void *info)
|
||||
{
|
||||
|
||||
QCFSocketNotifier *cfSocketNotifier = static_cast<QCFSocketNotifier *>(info);
|
||||
@ -61,7 +61,15 @@ void qt_mac_socket_callback(CFSocketRef s, CFSocketCallBackType callbackType, CF
|
||||
// notification after we've successfully disabled the CFSocket, but our Qt
|
||||
// notifier is now gone. The upshot is we have to check the notifier
|
||||
// every time.
|
||||
if (callbackType == kCFSocketReadCallBack) {
|
||||
if (callbackType == kCFSocketConnectCallBack) {
|
||||
// The data pointer will be non-null on connection error
|
||||
if (data) {
|
||||
if (socketInfo->readNotifier)
|
||||
QCoreApplication::sendEvent(socketInfo->readNotifier, ¬ifierEvent);
|
||||
if (socketInfo->writeNotifier)
|
||||
QCoreApplication::sendEvent(socketInfo->writeNotifier, ¬ifierEvent);
|
||||
}
|
||||
} else if (callbackType == kCFSocketReadCallBack) {
|
||||
if (socketInfo->readNotifier && socketInfo->readEnabled) {
|
||||
socketInfo->readEnabled = false;
|
||||
QCoreApplication::sendEvent(socketInfo->readNotifier, ¬ifierEvent);
|
||||
@ -152,7 +160,7 @@ void QCFSocketNotifier::registerSocketNotifier(QSocketNotifier *notifier)
|
||||
|
||||
// Create CFSocket, specify that we want both read and write callbacks (the callbacks
|
||||
// are enabled/disabled later on).
|
||||
const int callbackTypes = kCFSocketReadCallBack | kCFSocketWriteCallBack;
|
||||
const int callbackTypes = kCFSocketConnectCallBack | kCFSocketReadCallBack | kCFSocketWriteCallBack;
|
||||
CFSocketContext context = {0, this, 0, 0, 0};
|
||||
socketInfo->socket = CFSocketCreateWithNative(kCFAllocatorDefault, nativeSocket, callbackTypes, qt_mac_socket_callback, &context);
|
||||
if (CFSocketIsValid(socketInfo->socket) == false) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user