From f03cd9a7bcbf88eefb8e77b99b4c194da759c7ff Mon Sep 17 00:00:00 2001 From: Alex Trotsenko Date: Wed, 9 Nov 2016 18:40:43 +0200 Subject: [PATCH] QAbstractSocket: fix handling of successful connectToHostByName() In case connectToHostByName() returns 'true', we should fetch the connection parameters and emit connected() signal. Change-Id: Id36b6d71005b8cec070a1b12e7bb0caf8bf0bcb9 Reviewed-by: Thiago Macieira Reviewed-by: Timur Pocheptsov --- src/network/socket/qabstractsocket.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 92c18fb0f1..0f13b1d1b8 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -962,13 +962,17 @@ void QAbstractSocketPrivate::startConnectingByName(const QString &host) emit q->stateChanged(state); if (cachedSocketDescriptor != -1 || initSocketLayer(QAbstractSocket::UnknownNetworkLayerProtocol)) { - if (socketEngine->connectToHostByName(host, port) || - socketEngine->state() == QAbstractSocket::ConnectingState) { - cachedSocketDescriptor = socketEngine->socketDescriptor(); - + // Try to connect to the host. If it succeeds immediately + // (e.g. QSocks5SocketEngine in UDPASSOCIATE mode), emit + // connected() and return. + if (socketEngine->connectToHostByName(host, port)) { + fetchConnectionParameters(); return; } + if (socketEngine->state() == QAbstractSocket::ConnectingState) + return; + // failed to connect setError(socketEngine->error(), socketEngine->errorString()); }