481 case QAbstractSocket::ProxyAuthenticationRequiredError:
482 case QAbstractSocket::ProxyConnectionRefusedError:
483 case QAbstractSocket::ProxyConnectionClosedError:
484 case QAbstractSocket::ProxyConnectionTimeoutError:
485 case QAbstractSocket::ProxyNotFoundError:
486 case QAbstractSocket::ProxyProtocolError:
540bool QAbstractSocketPrivate::initSocketLayer(QAbstractSocket::NetworkLayerProtocol protocol)
542#ifdef QT_NO_NETWORKPROXY
544 static const QNetworkProxy &proxyInUse = *(QNetworkProxy *)0;
547 Q_Q(QAbstractSocket);
548#if defined (QABSTRACTSOCKET_DEBUG)
550 if (q->socketType() == QAbstractSocket::TcpSocket) typeStr =
"TcpSocket"_L1;
551 else if (q->socketType() == QAbstractSocket::UdpSocket) typeStr =
"UdpSocket"_L1;
552 else if (q->socketType() == QAbstractSocket::SctpSocket) typeStr =
"SctpSocket"_L1;
553 else typeStr =
"UnknownSocketType"_L1;
555 if (protocol == QAbstractSocket::IPv4Protocol) protocolStr =
"IPv4Protocol"_L1;
556 else if (protocol == QAbstractSocket::IPv6Protocol) protocolStr =
"IPv6Protocol"_L1;
557 else protocolStr =
"UnknownNetworkLayerProtocol"_L1;
561 socketEngine = QAbstractSocketEngine::createSocketEngine(q->socketType(), proxyInUse, q);
563 setError(QAbstractSocket::UnsupportedSocketOperationError,
564 QAbstractSocket::tr(
"Operation on socket is not supported"));
567 if (!socketEngine->initialize(q->socketType(), protocol)) {
568#if defined (QABSTRACTSOCKET_DEBUG)
569 qDebug(
"QAbstractSocketPrivate::initSocketLayer(%s, %s) failed (%s)",
570 typeStr.toLatin1().constData(), protocolStr.toLatin1().constData(),
571 socketEngine->errorString().toLatin1().constData());
573 setError(socketEngine->error(), socketEngine->errorString());
577 configureCreatedSocket();
579 if (threadData.loadRelaxed()->hasEventDispatcher())
580 socketEngine->setReceiver(
this);
582#if defined (QABSTRACTSOCKET_DEBUG)
583 qDebug(
"QAbstractSocketPrivate::initSocketLayer(%s, %s) success",
584 typeStr.toLatin1().constData(), protocolStr.toLatin1().constData());
607bool QAbstractSocketPrivate::canReadNotification()
609 Q_Q(QAbstractSocket);
610#if defined (QABSTRACTSOCKET_DEBUG)
611 qDebug(
"QAbstractSocketPrivate::canReadNotification()");
616 const qint64 oldBufferSize = buffer.size();
619 if (readBufferMaxSize && oldBufferSize >= readBufferMaxSize) {
620 socketEngine->setReadNotificationEnabled(
false);
621#if defined (QABSTRACTSOCKET_DEBUG)
622 qDebug(
"QAbstractSocketPrivate::canReadNotification() buffer is full");
629 if (!readFromSocket()) {
630#if defined (QABSTRACTSOCKET_DEBUG)
631 qDebug(
"QAbstractSocketPrivate::canReadNotification() disconnecting socket");
633 q->disconnectFromHost();
638 if (buffer.size() == oldBufferSize) {
641 return !q->isReadable();
644 const bool isUdpSocket = (socketType == QAbstractSocket::UdpSocket);
645 if (hasPendingData && (!isUdpSocket || hasPendingDatagram)) {
646 socketEngine->setReadNotificationEnabled(
false);
650#if QT_CONFIG(udpsocket)
651 || socketEngine->hasPendingDatagrams()
654 hasPendingData =
true;
655 hasPendingDatagram = isUdpSocket;
661#if defined (QABSTRACTSOCKET_DEBUG)
663 if (state == QAbstractSocket::UnconnectedState || state == QAbstractSocket::ClosingState)
664 qDebug(
"QAbstractSocketPrivate::canReadNotification() socket is closing - returning");
675void QAbstractSocketPrivate::canCloseNotification()
677 Q_Q(QAbstractSocket);
680#if defined (QABSTRACTSOCKET_DEBUG)
681 qDebug(
"QAbstractSocketPrivate::canCloseNotification()");
687 newBytes = buffer.size();
688 qint64 oldReadBufferMaxSize = readBufferMaxSize;
689 readBufferMaxSize = 0;
690 bool hadReadFromSocket = readFromSocket();
691 readBufferMaxSize = oldReadBufferMaxSize;
692 if (!hadReadFromSocket) {
693 q->disconnectFromHost();
696 newBytes = buffer.size() - newBytes;
705 QMetaObject::invokeMethod(socketEngine,
"closeNotification", Qt::QueuedConnection);
707 }
else if ((socketType == QAbstractSocket::TcpSocket ||
708 socketType == QAbstractSocket::SctpSocket) && socketEngine) {
754bool QAbstractSocketPrivate::writeToSocket()
756 Q_Q(QAbstractSocket);
757 if (!socketEngine || !socketEngine->isValid() || (writeBuffer.isEmpty()
758 && socketEngine->bytesToWrite() == 0)) {
759#if defined (QABSTRACTSOCKET_DEBUG)
760 qDebug(
"QAbstractSocketPrivate::writeToSocket() nothing to do: valid ? %s, writeBuffer.isEmpty() ? %s",
761 (socketEngine && socketEngine->isValid()) ?
"yes" :
"no", writeBuffer.isEmpty() ?
"yes" :
"no");
765 if (state == QAbstractSocket::ClosingState) {
766 q->disconnectFromHost();
769 socketEngine->setWriteNotificationEnabled(
false);
775 qint64 nextSize = writeBuffer.nextDataBlockSize();
776 const char *ptr = writeBuffer.readPointer();
779 qint64 written = nextSize ? socketEngine->write(ptr, nextSize) : Q_INT64_C(0);
781#if defined (QABSTRACTSOCKET_DEBUG)
782 qDebug() <<
"QAbstractSocketPrivate::writeToSocket() write error, aborting."
783 << socketEngine->errorString();
785 setErrorAndEmit(socketEngine->error(), socketEngine->errorString());
791#if defined (QABSTRACTSOCKET_DEBUG)
792 qDebug(
"QAbstractSocketPrivate::writeToSocket() %lld bytes written to the network",
798 writeBuffer.free(written);
801 emitBytesWritten(written);
804 if (writeBuffer.isEmpty() && socketEngine && !socketEngine->bytesToWrite())
805 socketEngine->setWriteNotificationEnabled(
false);
806 if (state == QAbstractSocket::ClosingState)
807 q->disconnectFromHost();
833void QAbstractSocketPrivate::resolveProxy(
const QString &hostname, quint16 port)
835 QList<QNetworkProxy> proxies;
837 if (proxy.type() != QNetworkProxy::DefaultProxy) {
842 QNetworkProxyQuery query(hostname, port, protocolTag,
843 socketType == QAbstractSocket::TcpSocket ?
844 QNetworkProxyQuery::TcpSocket :
845 socketType == QAbstractSocket::SctpSocket ?
846 QNetworkProxyQuery::SctpSocket :
847 QNetworkProxyQuery::UdpSocket);
848 proxies = QNetworkProxyFactory::proxyForQuery(query);
852 for (
const QNetworkProxy &p : std::as_const(proxies)) {
853 if (socketType == QAbstractSocket::UdpSocket &&
854 (p.capabilities() & QNetworkProxy::UdpTunnelingCapability) == 0)
857 if (socketType == QAbstractSocket::TcpSocket &&
858 (p.capabilities() & QNetworkProxy::TunnelingCapability) == 0)
861 if (socketType == QAbstractSocket::SctpSocket &&
862 (p.capabilities() & QNetworkProxy::SctpTunnelingCapability) == 0)
871 proxyInUse = QNetworkProxy();
882void QAbstractSocketPrivate::startConnectingByName(
const QString &host)
884 Q_Q(QAbstractSocket);
885 if (state == QAbstractSocket::ConnectingState || state == QAbstractSocket::ConnectedState)
888#if defined(QABSTRACTSOCKET_DEBUG)
889 qDebug(
"QAbstractSocketPrivate::startConnectingByName(host == %s)", qPrintable(host));
893 state = QAbstractSocket::ConnectingState;
894 emit q->stateChanged(state);
896 if (cachedSocketDescriptor != -1 || initSocketLayer(QAbstractSocket::UnknownNetworkLayerProtocol)) {
900 if (socketEngine->connectToHostByName(host, port)) {
901 fetchConnectionParameters();
905 if (socketEngine->state() == QAbstractSocket::ConnectingState)
909 setError(socketEngine->error(), socketEngine->errorString());
912 state = QAbstractSocket::UnconnectedState;
913 emit q->errorOccurred(socketError);
914 emit q->stateChanged(state);
926void QAbstractSocketPrivate::_q_startConnecting(
const QHostInfo &hostInfo)
928 Q_Q(QAbstractSocket);
930 if (state != QAbstractSocket::HostLookupState)
933 if (hostLookupId != -1 && hostLookupId != hostInfo.lookupId()) {
934 qWarning(
"QAbstractSocketPrivate::_q_startConnecting() received hostInfo for wrong lookup ID %d expected %d", hostInfo.lookupId(), hostLookupId);
939 if (preferredNetworkLayerProtocol == QAbstractSocket::UnknownNetworkLayerProtocol || preferredNetworkLayerProtocol == QAbstractSocket::AnyIPProtocol) {
940 addresses = hostInfo.addresses();
942 const auto candidates = hostInfo.addresses();
943 for (
const QHostAddress &address : candidates) {
944 if (address.protocol() == preferredNetworkLayerProtocol)
945 addresses += address;
950#if defined(QABSTRACTSOCKET_DEBUG)
952 for (
int i = 0; i < addresses.count(); ++i) {
953 if (i != 0) s +=
", "_L1;
954 s += addresses.at(i).toString();
957 qDebug(
"QAbstractSocketPrivate::_q_startConnecting(hostInfo == %s)", s.toLatin1().constData());
961 addresses += addresses;
965 if (addresses.isEmpty()) {
966#if defined(QABSTRACTSOCKET_DEBUG)
967 qDebug(
"QAbstractSocketPrivate::_q_startConnecting(), host not found");
969 state = QAbstractSocket::UnconnectedState;
970 setError(QAbstractSocket::HostNotFoundError, QAbstractSocket::tr(
"Host not found"));
971 emit q->stateChanged(state);
972 emit q->errorOccurred(QAbstractSocket::HostNotFoundError);
978 state = QAbstractSocket::ConnectingState;
979 emit q->stateChanged(state);
986 _q_connectToNextAddress();
998void QAbstractSocketPrivate::_q_connectToNextAddress()
1000 Q_Q(QAbstractSocket);
1003 if (addresses.isEmpty()) {
1004#if defined(QABSTRACTSOCKET_DEBUG)
1005 qDebug(
"QAbstractSocketPrivate::_q_connectToNextAddress(), all addresses failed.");
1007 state = QAbstractSocket::UnconnectedState;
1009 if ((socketEngine->error() == QAbstractSocket::UnknownSocketError
1013 || socketEngine->error() == QAbstractSocket::UnsupportedSocketOperationError
1015 ) && socketEngine->state() == QAbstractSocket::ConnectingState) {
1016 setError(QAbstractSocket::ConnectionRefusedError,
1017 QAbstractSocket::tr(
"Connection refused"));
1019 setError(socketEngine->error(), socketEngine->errorString());
1025 emit q->stateChanged(state);
1026 emit q->errorOccurred(socketError);
1031 host = addresses.takeFirst();
1032#if defined(QABSTRACTSOCKET_DEBUG)
1033 qDebug(
"QAbstractSocketPrivate::_q_connectToNextAddress(), connecting to %s:%i, %d left to try",
1034 host.toString().toLatin1().constData(), port, addresses.count());
1037 if (cachedSocketDescriptor == -1 && !initSocketLayer(host.protocol())) {
1039#if defined(QABSTRACTSOCKET_DEBUG)
1040 qDebug(
"QAbstractSocketPrivate::_q_connectToNextAddress(), failed to initialize sock layer");
1049 socketEngine->connectToHost(host, port)) {
1051 fetchConnectionParameters();
1057 if (socketEngine->state() != QAbstractSocket::ConnectingState) {
1058#if defined(QABSTRACTSOCKET_DEBUG)
1059 qDebug(
"QAbstractSocketPrivate::_q_connectToNextAddress(), connection failed (%s)",
1060 socketEngine->errorString().toLatin1().constData());
1066 if (threadData.loadRelaxed()->hasEventDispatcher()) {
1067 if (!connectTimer) {
1068 connectTimer =
new QTimer(q);
1069 QObject::connect(connectTimer, SIGNAL(timeout()),
1070 q, SLOT(_q_abortConnectionAttempt()),
1071 Qt::DirectConnection);
1073 connectTimer->start(DefaultConnectTimeout);
1078 socketEngine->setWriteNotificationEnabled(
true);
1080 }
while (state != QAbstractSocket::ConnectedState);
1088void QAbstractSocketPrivate::_q_testConnection()
1091 connectTimer->stop();
1094 if (socketEngine->state() == QAbstractSocket::ConnectedState) {
1097 fetchConnectionParameters();
1099 q_func()->disconnectFromHost();
1100 pendingClose =
false;
1106 if (isProxyError(socketEngine->error()))
1110#if defined(QABSTRACTSOCKET_DEBUG)
1111 qDebug(
"QAbstractSocketPrivate::_q_testConnection() connection failed,"
1112 " checking for alternative addresses");
1114 _q_connectToNextAddress();
1124void QAbstractSocketPrivate::_q_abortConnectionAttempt()
1126 Q_Q(QAbstractSocket);
1127#if defined(QABSTRACTSOCKET_DEBUG)
1128 qDebug(
"QAbstractSocketPrivate::_q_abortConnectionAttempt() (timed out)");
1131 socketEngine->setWriteNotificationEnabled(
false);
1133 connectTimer->stop();
1135 if (addresses.isEmpty()) {
1136 state = QAbstractSocket::UnconnectedState;
1137 setError(QAbstractSocket::SocketTimeoutError,
1138 QAbstractSocket::tr(
"Connection timed out"));
1139 emit q->stateChanged(state);
1140 emit q->errorOccurred(socketError);
1142 _q_connectToNextAddress();
1151bool QAbstractSocketPrivate::readFromSocket()
1153 Q_Q(QAbstractSocket);
1155 qint64 bytesToRead = socketEngine->bytesAvailable();
1156 if (bytesToRead == 0) {
1167 if (q->isReadable()) {
1168 if (readBufferMaxSize && bytesToRead > (readBufferMaxSize - buffer.size()))
1169 bytesToRead = readBufferMaxSize - buffer.size();
1171#if defined(QABSTRACTSOCKET_DEBUG)
1172 qDebug(
"QAbstractSocketPrivate::readFromSocket() about to read %lld bytes",
1177 char *ptr = buffer.reserve(bytesToRead);
1178 qint64 readBytes = socketEngine->read(ptr, bytesToRead);
1179 buffer.chop(bytesToRead - (readBytes < 0 ? qint64(0) : readBytes));
1180 if (readBytes == -2) {
1184#if defined(QABSTRACTSOCKET_DEBUG)
1185 qDebug(
"QAbstractSocketPrivate::readFromSocket() got %lld bytes, buffer size = %lld",
1186 readBytes, buffer.size());
1190 QVarLengthArray<
char, 4096> discardBuffer(bytesToRead);
1192#if defined(QABSTRACTSOCKET_DEBUG)
1193 qDebug(
"QAbstractSocketPrivate::readFromSocket() about to discard %lld bytes",
1196 socketEngine->read(discardBuffer.data(), bytesToRead);
1199 if (!socketEngine->isValid()) {
1200#if defined(QABSTRACTSOCKET_DEBUG)
1201 qDebug(
"QAbstractSocketPrivate::readFromSocket() read failed: %s",
1202 socketEngine->errorString().toLatin1().constData());
1204 setErrorAndEmit(socketEngine->error(), socketEngine->errorString());
1233void QAbstractSocketPrivate::emitBytesWritten(qint64 bytes,
int channel)
1235 Q_Q(QAbstractSocket);
1237 if (!emittedBytesWritten && channel == currentWriteChannel) {
1238 QScopedValueRollback<
bool> r(emittedBytesWritten);
1239 emittedBytesWritten =
true;
1240 emit q->bytesWritten(bytes);
1243 emit q->channelBytesWritten(channel, bytes);
1250void QAbstractSocketPrivate::fetchConnectionParameters()
1252 Q_Q(QAbstractSocket);
1254 peerName = hostName;
1256 if (q->isReadable()) {
1257 const int inboundStreamCount = socketEngine->inboundStreamCount();
1258 setReadChannelCount(qMax(1, inboundStreamCount));
1259 if (inboundStreamCount == 0)
1260 readChannelCount = 0;
1262 if (q->isWritable()) {
1263 const int outboundStreamCount = socketEngine->outboundStreamCount();
1264 setWriteChannelCount(qMax(1, outboundStreamCount));
1265 if (outboundStreamCount == 0)
1266 writeChannelCount = 0;
1268 socketEngine->setReadNotificationEnabled(
true);
1269 socketEngine->setWriteNotificationEnabled(
true);
1270 localPort = socketEngine->localPort();
1271 peerPort = socketEngine->peerPort();
1272 localAddress = socketEngine->localAddress();
1273 peerAddress = socketEngine->peerAddress();
1274 cachedSocketDescriptor = socketEngine->socketDescriptor();
1277 state = QAbstractSocket::ConnectedState;
1278#if defined(QABSTRACTSOCKET_DEBUG)
1279 qDebug(
"QAbstractSocketPrivate::fetchConnectionParameters() connection to %s:%i established",
1280 host.toString().toLatin1().constData(), port);
1282 emit q->stateChanged(state);
1283 emit q->connected();
1305void QAbstractSocketPrivate::pauseSocketNotifiers(QAbstractSocket *socket)
1307 QAbstractSocketEngine *socketEngine = socket->d_func()->socketEngine;
1310 bool read = socketEngine->isReadNotificationEnabled();
1311 bool write = socketEngine->isWriteNotificationEnabled();
1312 bool except = socketEngine->isExceptionNotificationEnabled();
1314#ifdef QABSTRACTSOCKET_DEBUG
1315 qDebug() << socketEngine->socketDescriptor()
1316 <<
"pause notifiers, storing 'true' states, currently read:" << read
1317 <<
"write:" << write <<
"except:" << except;
1322 socket->d_func()->prePauseReadSocketNotifierState =
true;
1323 socketEngine->setReadNotificationEnabled(
false);
1326 socket->d_func()->prePauseWriteSocketNotifierState =
true;
1327 socketEngine->setWriteNotificationEnabled(
false);
1330 socket->d_func()->prePauseExceptionSocketNotifierState =
true;
1331 socketEngine->setExceptionNotificationEnabled(
false);
1335void QAbstractSocketPrivate::resumeSocketNotifiers(QAbstractSocket *socket)
1337 QAbstractSocketEngine *socketEngine = socket->d_func()->socketEngine;
1340 QAbstractSocketPrivate *priv = socket->d_func();
1341#ifdef QABSTRACTSOCKET_DEBUG
1342 qDebug() << socketEngine->socketDescriptor()
1343 <<
"Maybe resume notifiers, read:" << priv->prePauseReadSocketNotifierState
1344 <<
"write:" << priv->prePauseWriteSocketNotifierState
1345 <<
"exception:" << priv->prePauseExceptionSocketNotifierState;
1347 if (std::exchange(priv->prePauseReadSocketNotifierState,
false))
1348 socketEngine->setReadNotificationEnabled(
true);
1349 if (std::exchange(priv->prePauseWriteSocketNotifierState,
false))
1350 socketEngine->setWriteNotificationEnabled(
true);
1351 if (std::exchange(priv->prePauseExceptionSocketNotifierState,
false))
1352 socketEngine->setExceptionNotificationEnabled(
true);
1391QAbstractSocket::QAbstractSocket(SocketType socketType,
1392 QAbstractSocketPrivate &dd, QObject *parent)
1393 : QIODevice(dd, parent)
1395 Q_D(QAbstractSocket);
1396#if defined(QABSTRACTSOCKET_DEBUG)
1397 qDebug(
"QAbstractSocket::QAbstractSocket(%sSocket, QAbstractSocketPrivate == %p, parent == %p)",
1398 socketType == TcpSocket ?
"Tcp" : socketType == UdpSocket ?
"Udp"
1399 : socketType == SctpSocket ?
"Sctp" :
"Unknown", &dd, parent);
1401 d->socketType = socketType;
1503bool QAbstractSocketPrivate::bind(
const QHostAddress &address, quint16 port, QAbstractSocket::BindMode mode,
1504 const QNetworkInterface *iface)
1506 Q_Q(QAbstractSocket);
1509 if (!socketEngine || !socketEngine->isValid()) {
1510 QHostAddress nullAddress;
1511 resolveProxy(nullAddress.toString(), port);
1513 QAbstractSocket::NetworkLayerProtocol protocol = address.protocol();
1514 if (protocol == QAbstractSocket::UnknownNetworkLayerProtocol)
1515 protocol = nullAddress.protocol();
1517 if (!initSocketLayer(protocol))
1521 if (mode != QAbstractSocket::DefaultForPlatform) {
1523 if ((mode & QAbstractSocket::ShareAddress) || (mode & QAbstractSocket::ReuseAddressHint))
1524 socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 1);
1526 socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 0);
1529 if (mode & QAbstractSocket::ReuseAddressHint)
1530 socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 1);
1532 socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 0);
1533 if (mode & QAbstractSocket::DontShareAddress)
1534 socketEngine->setOption(QAbstractSocketEngine::BindExclusively, 1);
1536 socketEngine->setOption(QAbstractSocketEngine::BindExclusively, 0);
1539#if QT_CONFIG(networkinterface)
1540 if (iface && iface->isValid())
1541 socketEngine->setOption(QAbstractSocketEngine::BindInterfaceIndex, iface->index());
1543 bool result = socketEngine->bind(address, port);
1544 cachedSocketDescriptor = socketEngine->socketDescriptor();
1547 setErrorAndEmit(socketEngine->error(), socketEngine->errorString());
1551 state = QAbstractSocket::BoundState;
1552 localAddress = socketEngine->localAddress();
1553 localPort = socketEngine->localPort();
1555 emit q->stateChanged(state);
1559 if (q->isValid() && socketType == QAbstractSocket::UdpSocket)
1560 socketEngine->setReadNotificationEnabled(
true);
1630void QAbstractSocket::connectToHost(
const QString &hostName, quint16 port,
1632 NetworkLayerProtocol protocol)
1634 Q_D(QAbstractSocket);
1635#if defined(QABSTRACTSOCKET_DEBUG)
1636 qDebug(
"QAbstractSocket::connectToHost(\"%s\", %i, %i)...", qPrintable(hostName), port,
1640 if (d->state == ConnectedState || d->state == ConnectingState
1641 || d->state == ClosingState || d->state == HostLookupState) {
1642 qWarning(
"QAbstractSocket::connectToHost() called when already looking up or connecting/connected to \"%s\"", qPrintable(hostName));
1643 d->setErrorAndEmit(OperationError, tr(
"Trying to connect while connection is in progress"));
1647 d->preferredNetworkLayerProtocol = protocol;
1648 d->hostName = hostName;
1650 d->setReadChannelCount(0);
1651 d->setWriteChannelCount(0);
1652 d->abortCalled =
false;
1653 d->pendingClose =
false;
1654 if (d->state != BoundState) {
1655 d->state = UnconnectedState;
1657 d->localAddress.clear();
1660 d->peerAddress.clear();
1661 d->peerName = hostName;
1662 if (d->hostLookupId != -1) {
1663 QHostInfo::abortHostLookup(d->hostLookupId);
1664 d->hostLookupId = -1;
1667#ifndef QT_NO_NETWORKPROXY
1669 d->resolveProxy(hostName, port);
1670 if (d->proxyInUse.type() == QNetworkProxy::DefaultProxy) {
1672 d->setErrorAndEmit(UnsupportedSocketOperationError,
1673 tr(
"Operation on socket is not supported"));
1679 d->socketError = UnknownSocketError;
1680 if (openMode & QIODevice::Unbuffered)
1681 d->isBuffered =
false;
1682 else if (!d_func()->isBuffered)
1683 openMode |= QAbstractSocket::Unbuffered;
1685 QIODevice::open(openMode);
1686 d->readChannelCount = d->writeChannelCount = 0;
1688 d->state = HostLookupState;
1689 emit stateChanged(d->state);
1692 if (temp.setAddress(hostName)) {
1694 info.setAddresses(QList<QHostAddress>() << temp);
1695 d->_q_startConnecting(info);
1696#ifndef QT_NO_NETWORKPROXY
1697 }
else if (d->proxyInUse.capabilities() & QNetworkProxy::HostNameLookupCapability) {
1699 d->startConnectingByName(hostName);
1703 if (d->threadData.loadRelaxed()->hasEventDispatcher()) {
1706 bool immediateResultValid =
false;
1707 QHostInfo hostInfo = qt_qhostinfo_lookup(hostName,
1709 SLOT(_q_startConnecting(QHostInfo)),
1710 &immediateResultValid,
1712 if (immediateResultValid) {
1713 d->hostLookupId = -1;
1714 d->_q_startConnecting(hostInfo);
1719#if defined(QABSTRACTSOCKET_DEBUG)
1720 qDebug(
"QAbstractSocket::connectToHost(\"%s\", %i) == %s%s", hostName.toLatin1().constData(), port,
1721 (d->state == ConnectedState) ?
"true" :
"false",
1722 (d->state == ConnectingState || d->state == HostLookupState)
1723 ?
" (connection in progress)" :
"");
1731void QAbstractSocket::connectToHost(
const QHostAddress &address, quint16 port,
1734#if defined(QABSTRACTSOCKET_DEBUG)
1735 qDebug(
"QAbstractSocket::connectToHost([%s], %i, %i)...",
1736 address.toString().toLatin1().constData(), port, (
int) openMode);
1738 connectToHost(address.toString(), port, openMode);