495 case QAbstractSocket::ProxyAuthenticationRequiredError:
496 case QAbstractSocket::ProxyConnectionRefusedError:
497 case QAbstractSocket::ProxyConnectionClosedError:
498 case QAbstractSocket::ProxyConnectionTimeoutError:
499 case QAbstractSocket::ProxyNotFoundError:
500 case QAbstractSocket::ProxyProtocolError:
554bool QAbstractSocketPrivate::initSocketLayer(QAbstractSocket::NetworkLayerProtocol protocol)
556#ifdef QT_NO_NETWORKPROXY
558 static const QNetworkProxy &proxyInUse = *(QNetworkProxy *)0;
561 Q_Q(QAbstractSocket);
562#if defined (QABSTRACTSOCKET_DEBUG)
564 if (q->socketType() == QAbstractSocket::TcpSocket) typeStr =
"TcpSocket"_L1;
565 else if (q->socketType() == QAbstractSocket::UdpSocket) typeStr =
"UdpSocket"_L1;
566 else if (q->socketType() == QAbstractSocket::SctpSocket) typeStr =
"SctpSocket"_L1;
567 else typeStr =
"UnknownSocketType"_L1;
569 if (protocol == QAbstractSocket::IPv4Protocol) protocolStr =
"IPv4Protocol"_L1;
570 else if (protocol == QAbstractSocket::IPv6Protocol) protocolStr =
"IPv6Protocol"_L1;
571 else protocolStr =
"UnknownNetworkLayerProtocol"_L1;
575 socketEngine = QAbstractSocketEngine::createSocketEngine(q->socketType(), proxyInUse, q);
577 setError(QAbstractSocket::UnsupportedSocketOperationError,
578 QAbstractSocket::tr(
"Operation on socket is not supported"));
581 if (!socketEngine->initialize(q->socketType(), protocol)) {
582#if defined (QABSTRACTSOCKET_DEBUG)
583 qDebug(
"QAbstractSocketPrivate::initSocketLayer(%s, %s) failed (%s)",
584 typeStr.toLatin1().constData(), protocolStr.toLatin1().constData(),
585 socketEngine->errorString().toLatin1().constData());
587 setError(socketEngine->error(), socketEngine->errorString());
591 configureCreatedSocket();
593 if (threadData.loadRelaxed()->hasEventDispatcher())
594 socketEngine->setReceiver(
this);
596#if defined (QABSTRACTSOCKET_DEBUG)
597 qDebug(
"QAbstractSocketPrivate::initSocketLayer(%s, %s) success",
598 typeStr.toLatin1().constData(), protocolStr.toLatin1().constData());
621bool QAbstractSocketPrivate::canReadNotification()
623 Q_Q(QAbstractSocket);
624#if defined (QABSTRACTSOCKET_DEBUG)
625 qDebug(
"QAbstractSocketPrivate::canReadNotification()");
630 const qint64 oldBufferSize = buffer.size();
633 if (readBufferMaxSize && oldBufferSize >= readBufferMaxSize) {
634 socketEngine->setReadNotificationEnabled(
false);
635#if defined (QABSTRACTSOCKET_DEBUG)
636 qDebug(
"QAbstractSocketPrivate::canReadNotification() buffer is full");
643 if (!readFromSocket()) {
644#if defined (QABSTRACTSOCKET_DEBUG)
645 qDebug(
"QAbstractSocketPrivate::canReadNotification() disconnecting socket");
647 q->disconnectFromHost();
652 if (buffer.size() == oldBufferSize) {
655 return !q->isReadable();
658 const bool isUdpSocket = (socketType == QAbstractSocket::UdpSocket);
659 if (hasPendingData && (!isUdpSocket || hasPendingDatagram)) {
660 socketEngine->setReadNotificationEnabled(
false);
664#if QT_CONFIG(udpsocket)
665 || socketEngine->hasPendingDatagrams()
668 hasPendingData =
true;
669 hasPendingDatagram = isUdpSocket;
675#if defined (QABSTRACTSOCKET_DEBUG)
677 if (state == QAbstractSocket::UnconnectedState || state == QAbstractSocket::ClosingState)
678 qDebug(
"QAbstractSocketPrivate::canReadNotification() socket is closing - returning");
689void QAbstractSocketPrivate::canCloseNotification()
691 Q_Q(QAbstractSocket);
694#if defined (QABSTRACTSOCKET_DEBUG)
695 qDebug(
"QAbstractSocketPrivate::canCloseNotification()");
701 newBytes = buffer.size();
702 qint64 oldReadBufferMaxSize = readBufferMaxSize;
703 readBufferMaxSize = 0;
704 bool hadReadFromSocket = readFromSocket();
705 readBufferMaxSize = oldReadBufferMaxSize;
706 if (!hadReadFromSocket) {
707 q->disconnectFromHost();
710 newBytes = buffer.size() - newBytes;
719 QMetaObject::invokeMethod(socketEngine,
"closeNotification", Qt::QueuedConnection);
721 }
else if ((socketType == QAbstractSocket::TcpSocket ||
722 socketType == QAbstractSocket::SctpSocket) && socketEngine) {
768bool QAbstractSocketPrivate::writeToSocket()
770 Q_Q(QAbstractSocket);
771 if (!socketEngine || !socketEngine->isValid() || (writeBuffer.isEmpty()
772 && socketEngine->bytesToWrite() == 0)) {
773#if defined (QABSTRACTSOCKET_DEBUG)
774 qDebug(
"QAbstractSocketPrivate::writeToSocket() nothing to do: valid ? %s, writeBuffer.isEmpty() ? %s",
775 (socketEngine && socketEngine->isValid()) ?
"yes" :
"no", writeBuffer.isEmpty() ?
"yes" :
"no");
779 if (state == QAbstractSocket::ClosingState) {
780 q->disconnectFromHost();
783 socketEngine->setWriteNotificationEnabled(
false);
789 qint64 nextSize = writeBuffer.nextDataBlockSize();
790 const char *ptr = writeBuffer.readPointer();
793 qint64 written = nextSize ? socketEngine->write(ptr, nextSize) : Q_INT64_C(0);
795#if defined (QABSTRACTSOCKET_DEBUG)
796 qDebug() <<
"QAbstractSocketPrivate::writeToSocket() write error, aborting."
797 << socketEngine->errorString();
799 setErrorAndEmit(socketEngine->error(), socketEngine->errorString());
805#if defined (QABSTRACTSOCKET_DEBUG)
806 qDebug(
"QAbstractSocketPrivate::writeToSocket() %lld bytes written to the network",
812 writeBuffer.free(written);
815 emitBytesWritten(written);
818 if (writeBuffer.isEmpty() && socketEngine && !socketEngine->bytesToWrite())
819 socketEngine->setWriteNotificationEnabled(
false);
820 if (state == QAbstractSocket::ClosingState)
821 q->disconnectFromHost();
847void QAbstractSocketPrivate::resolveProxy(
const QString &hostname, quint16 port)
849 QList<QNetworkProxy> proxies;
851 if (proxy.type() != QNetworkProxy::DefaultProxy) {
856 QNetworkProxyQuery query(hostname, port, protocolTag,
857 socketType == QAbstractSocket::TcpSocket ?
858 QNetworkProxyQuery::TcpSocket :
859 socketType == QAbstractSocket::SctpSocket ?
860 QNetworkProxyQuery::SctpSocket :
861 QNetworkProxyQuery::UdpSocket);
862 proxies = QNetworkProxyFactory::proxyForQuery(query);
866 for (
const QNetworkProxy &p : std::as_const(proxies)) {
867 if (socketType == QAbstractSocket::UdpSocket &&
868 (p.capabilities() & QNetworkProxy::UdpTunnelingCapability) == 0)
871 if (socketType == QAbstractSocket::TcpSocket &&
872 (p.capabilities() & QNetworkProxy::TunnelingCapability) == 0)
875 if (socketType == QAbstractSocket::SctpSocket &&
876 (p.capabilities() & QNetworkProxy::SctpTunnelingCapability) == 0)
885 proxyInUse = QNetworkProxy();
896void QAbstractSocketPrivate::startConnectingByName(
const QString &host)
898 Q_Q(QAbstractSocket);
899 if (state == QAbstractSocket::ConnectingState || state == QAbstractSocket::ConnectedState)
902#if defined(QABSTRACTSOCKET_DEBUG)
903 qDebug(
"QAbstractSocketPrivate::startConnectingByName(host == %s)", qPrintable(host));
907 state = QAbstractSocket::ConnectingState;
908 emit q->stateChanged(state);
910 if (cachedSocketDescriptor != -1 || initSocketLayer(QAbstractSocket::UnknownNetworkLayerProtocol)) {
914 if (socketEngine->connectToHostByName(host, port)) {
915 fetchConnectionParameters();
919 if (socketEngine->state() == QAbstractSocket::ConnectingState)
923 setError(socketEngine->error(), socketEngine->errorString());
926 state = QAbstractSocket::UnconnectedState;
927 emit q->errorOccurred(socketError);
928 emit q->stateChanged(state);
940void QAbstractSocketPrivate::_q_startConnecting(
const QHostInfo &hostInfo)
942 Q_Q(QAbstractSocket);
944 if (state != QAbstractSocket::HostLookupState)
947 if (hostLookupId != -1 && hostLookupId != hostInfo.lookupId()) {
948 qWarning(
"QAbstractSocketPrivate::_q_startConnecting() received hostInfo for wrong lookup ID %d expected %d", hostInfo.lookupId(), hostLookupId);
953 if (preferredNetworkLayerProtocol == QAbstractSocket::UnknownNetworkLayerProtocol || preferredNetworkLayerProtocol == QAbstractSocket::AnyIPProtocol) {
954 addresses = hostInfo.addresses();
956 const auto candidates = hostInfo.addresses();
957 for (
const QHostAddress &address : candidates) {
958 if (address.protocol() == preferredNetworkLayerProtocol)
959 addresses += address;
964#if defined(QABSTRACTSOCKET_DEBUG)
966 for (
int i = 0; i < addresses.count(); ++i) {
967 if (i != 0) s +=
", "_L1;
968 s += addresses.at(i).toString();
971 qDebug(
"QAbstractSocketPrivate::_q_startConnecting(hostInfo == %s)", s.toLatin1().constData());
975 addresses += addresses;
979 if (addresses.isEmpty()) {
980#if defined(QABSTRACTSOCKET_DEBUG)
981 qDebug(
"QAbstractSocketPrivate::_q_startConnecting(), host not found");
983 state = QAbstractSocket::UnconnectedState;
984 setError(QAbstractSocket::HostNotFoundError, QAbstractSocket::tr(
"Host not found"));
985 emit q->stateChanged(state);
986 emit q->errorOccurred(QAbstractSocket::HostNotFoundError);
992 state = QAbstractSocket::ConnectingState;
993 emit q->stateChanged(state);
1000 _q_connectToNextAddress();
1012void QAbstractSocketPrivate::_q_connectToNextAddress()
1014 Q_Q(QAbstractSocket);
1017 if (addresses.isEmpty()) {
1018#if defined(QABSTRACTSOCKET_DEBUG)
1019 qDebug(
"QAbstractSocketPrivate::_q_connectToNextAddress(), all addresses failed.");
1021 state = QAbstractSocket::UnconnectedState;
1023 if ((socketEngine->error() == QAbstractSocket::UnknownSocketError
1027 || socketEngine->error() == QAbstractSocket::UnsupportedSocketOperationError
1029 ) && socketEngine->state() == QAbstractSocket::ConnectingState) {
1030 setError(QAbstractSocket::ConnectionRefusedError,
1031 QAbstractSocket::tr(
"Connection refused"));
1033 setError(socketEngine->error(), socketEngine->errorString());
1039 emit q->stateChanged(state);
1040 emit q->errorOccurred(socketError);
1045 host = addresses.takeFirst();
1046#if defined(QABSTRACTSOCKET_DEBUG)
1047 qDebug(
"QAbstractSocketPrivate::_q_connectToNextAddress(), connecting to %s:%i, %d left to try",
1048 host.toString().toLatin1().constData(), port,
int(addresses.count()));
1051 if (cachedSocketDescriptor == -1 && !initSocketLayer(host.protocol())) {
1053#if defined(QABSTRACTSOCKET_DEBUG)
1054 qDebug(
"QAbstractSocketPrivate::_q_connectToNextAddress(), failed to initialize sock layer");
1063 socketEngine->connectToHost(host, port)) {
1065 fetchConnectionParameters();
1071 if (socketEngine->state() != QAbstractSocket::ConnectingState) {
1072#if defined(QABSTRACTSOCKET_DEBUG)
1073 qDebug(
"QAbstractSocketPrivate::_q_connectToNextAddress(), connection failed (%s)",
1074 socketEngine->errorString().toLatin1().constData());
1080 if (threadData.loadRelaxed()->hasEventDispatcher()) {
1081 if (!connectTimer) {
1082 connectTimer =
new QTimer(q);
1083 QObject::connect(connectTimer, SIGNAL(timeout()),
1084 q, SLOT(_q_abortConnectionAttempt()),
1085 Qt::DirectConnection);
1087 connectTimer->start(DefaultConnectTimeout);
1092 socketEngine->setWriteNotificationEnabled(
true);
1094 }
while (state != QAbstractSocket::ConnectedState);
1102void QAbstractSocketPrivate::_q_testConnection()
1105 connectTimer->stop();
1108 if (socketEngine->state() == QAbstractSocket::ConnectedState) {
1111 fetchConnectionParameters();
1113 q_func()->disconnectFromHost();
1114 pendingClose =
false;
1120 if (isProxyError(socketEngine->error()))
1124#if defined(QABSTRACTSOCKET_DEBUG)
1125 qDebug(
"QAbstractSocketPrivate::_q_testConnection() connection failed,"
1126 " checking for alternative addresses");
1128 _q_connectToNextAddress();
1138void QAbstractSocketPrivate::_q_abortConnectionAttempt()
1140 Q_Q(QAbstractSocket);
1141#if defined(QABSTRACTSOCKET_DEBUG)
1142 qDebug(
"QAbstractSocketPrivate::_q_abortConnectionAttempt() (timed out)");
1145 socketEngine->setWriteNotificationEnabled(
false);
1147 connectTimer->stop();
1149 if (addresses.isEmpty()) {
1150 state = QAbstractSocket::UnconnectedState;
1151 setError(QAbstractSocket::SocketTimeoutError,
1152 QAbstractSocket::tr(
"Connection timed out"));
1153 emit q->stateChanged(state);
1154 emit q->errorOccurred(socketError);
1156 _q_connectToNextAddress();
1165bool QAbstractSocketPrivate::readFromSocket()
1167 Q_Q(QAbstractSocket);
1169 qint64 bytesToRead = socketEngine->bytesAvailable();
1170 if (bytesToRead == 0) {
1181 if (q->isReadable()) {
1182 if (readBufferMaxSize && bytesToRead > (readBufferMaxSize - buffer.size()))
1183 bytesToRead = readBufferMaxSize - buffer.size();
1185#if defined(QABSTRACTSOCKET_DEBUG)
1186 qDebug(
"QAbstractSocketPrivate::readFromSocket() about to read %lld bytes",
1191 char *ptr = buffer.reserve(bytesToRead);
1192 qint64 readBytes = socketEngine->read(ptr, bytesToRead);
1193 buffer.chop(bytesToRead - (readBytes < 0 ? qint64(0) : readBytes));
1194 if (readBytes == -2) {
1198#if defined(QABSTRACTSOCKET_DEBUG)
1199 qDebug(
"QAbstractSocketPrivate::readFromSocket() got %lld bytes, buffer size = %lld",
1200 readBytes, buffer.size());
1204 QVarLengthArray<
char, 4096> discardBuffer(bytesToRead);
1206#if defined(QABSTRACTSOCKET_DEBUG)
1207 qDebug(
"QAbstractSocketPrivate::readFromSocket() about to discard %lld bytes",
1210 socketEngine->read(discardBuffer.data(), bytesToRead);
1213 if (!socketEngine->isValid()) {
1214#if defined(QABSTRACTSOCKET_DEBUG)
1215 qDebug(
"QAbstractSocketPrivate::readFromSocket() read failed: %s",
1216 socketEngine->errorString().toLatin1().constData());
1218 setErrorAndEmit(socketEngine->error(), socketEngine->errorString());
1247void QAbstractSocketPrivate::emitBytesWritten(qint64 bytes,
int channel)
1249 Q_Q(QAbstractSocket);
1251 bytesWrittenEmissionCount++;
1254 if (!emittedBytesWritten && channel == currentWriteChannel) {
1255 QScopedValueRollback<
bool> r(emittedBytesWritten);
1256 emittedBytesWritten =
true;
1257 emit q->bytesWritten(bytes);
1260 emit q->channelBytesWritten(channel, bytes);
1267void QAbstractSocketPrivate::fetchConnectionParameters()
1269 Q_Q(QAbstractSocket);
1271 peerName = hostName;
1273 if (q->isReadable()) {
1274 const int inboundStreamCount = socketEngine->inboundStreamCount();
1275 setReadChannelCount(qMax(1, inboundStreamCount));
1276 if (inboundStreamCount == 0)
1277 readChannelCount = 0;
1279 if (q->isWritable()) {
1280 const int outboundStreamCount = socketEngine->outboundStreamCount();
1281 setWriteChannelCount(qMax(1, outboundStreamCount));
1282 if (outboundStreamCount == 0)
1283 writeChannelCount = 0;
1285 socketEngine->setReadNotificationEnabled(
true);
1286 socketEngine->setWriteNotificationEnabled(
true);
1287 localPort = socketEngine->localPort();
1288 peerPort = socketEngine->peerPort();
1289 localAddress = socketEngine->localAddress();
1290 peerAddress = socketEngine->peerAddress();
1291 cachedSocketDescriptor = socketEngine->socketDescriptor();
1294 state = QAbstractSocket::ConnectedState;
1295#if defined(QABSTRACTSOCKET_DEBUG)
1296 qDebug(
"QAbstractSocketPrivate::fetchConnectionParameters() connection to %s:%i established",
1297 host.toString().toLatin1().constData(), port);
1299 emit q->stateChanged(state);
1300 emit q->connected();
1322void QAbstractSocketPrivate::pauseSocketNotifiers(QAbstractSocket *socket)
1324 QAbstractSocketEngine *socketEngine = socket->d_func()->socketEngine;
1327 bool read = socketEngine->isReadNotificationEnabled();
1328 bool write = socketEngine->isWriteNotificationEnabled();
1329 bool except = socketEngine->isExceptionNotificationEnabled();
1331#ifdef QABSTRACTSOCKET_DEBUG
1332 qDebug() << socketEngine->socketDescriptor()
1333 <<
"pause notifiers, storing 'true' states, currently read:" << read
1334 <<
"write:" << write <<
"except:" << except;
1339 socket->d_func()->prePauseReadSocketNotifierState =
true;
1340 socketEngine->setReadNotificationEnabled(
false);
1343 socket->d_func()->prePauseWriteSocketNotifierState =
true;
1344 socketEngine->setWriteNotificationEnabled(
false);
1347 socket->d_func()->prePauseExceptionSocketNotifierState =
true;
1348 socketEngine->setExceptionNotificationEnabled(
false);
1352void QAbstractSocketPrivate::resumeSocketNotifiers(QAbstractSocket *socket)
1354 QAbstractSocketEngine *socketEngine = socket->d_func()->socketEngine;
1357 QAbstractSocketPrivate *priv = socket->d_func();
1358#ifdef QABSTRACTSOCKET_DEBUG
1359 qDebug() << socketEngine->socketDescriptor()
1360 <<
"Maybe resume notifiers, read:" << priv->prePauseReadSocketNotifierState
1361 <<
"write:" << priv->prePauseWriteSocketNotifierState
1362 <<
"exception:" << priv->prePauseExceptionSocketNotifierState;
1364 if (std::exchange(priv->prePauseReadSocketNotifierState,
false))
1365 socketEngine->setReadNotificationEnabled(
true);
1366 if (std::exchange(priv->prePauseWriteSocketNotifierState,
false))
1367 socketEngine->setWriteNotificationEnabled(
true);
1368 if (std::exchange(priv->prePauseExceptionSocketNotifierState,
false))
1369 socketEngine->setExceptionNotificationEnabled(
true);
1408QAbstractSocket::QAbstractSocket(SocketType socketType,
1409 QAbstractSocketPrivate &dd, QObject *parent)
1410 : QIODevice(dd, parent)
1412 Q_D(QAbstractSocket);
1413#if defined(QABSTRACTSOCKET_DEBUG)
1414 qDebug(
"QAbstractSocket::QAbstractSocket(%sSocket, QAbstractSocketPrivate == %p, parent == %p)",
1415 socketType == TcpSocket ?
"Tcp" : socketType == UdpSocket ?
"Udp"
1416 : socketType == SctpSocket ?
"Sctp" :
"Unknown", &dd, parent);
1418 d->socketType = socketType;
1520bool QAbstractSocketPrivate::bind(
const QHostAddress &address, quint16 port, QAbstractSocket::BindMode mode,
1521 const QNetworkInterface *iface)
1523 Q_Q(QAbstractSocket);
1526 if (!socketEngine || !socketEngine->isValid()) {
1527 QHostAddress nullAddress;
1528 resolveProxy(nullAddress.toString(), port);
1530 QAbstractSocket::NetworkLayerProtocol protocol = address.protocol();
1531 if (protocol == QAbstractSocket::UnknownNetworkLayerProtocol)
1532 protocol = nullAddress.protocol();
1534 if (!initSocketLayer(protocol))
1538 if (mode != QAbstractSocket::DefaultForPlatform) {
1540 if ((mode & QAbstractSocket::ShareAddress) || (mode & QAbstractSocket::ReuseAddressHint))
1541 socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 1);
1543 socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 0);
1546 if (mode & QAbstractSocket::ReuseAddressHint)
1547 socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 1);
1549 socketEngine->setOption(QAbstractSocketEngine::AddressReusable, 0);
1550 if (mode & QAbstractSocket::DontShareAddress)
1551 socketEngine->setOption(QAbstractSocketEngine::BindExclusively, 1);
1553 socketEngine->setOption(QAbstractSocketEngine::BindExclusively, 0);
1556#if QT_CONFIG(networkinterface)
1557 if (iface && iface->isValid())
1558 socketEngine->setOption(QAbstractSocketEngine::BindInterfaceIndex, iface->index());
1560 bool result = socketEngine->bind(address, port);
1561 cachedSocketDescriptor = socketEngine->socketDescriptor();
1564 setErrorAndEmit(socketEngine->error(), socketEngine->errorString());
1568 state = QAbstractSocket::BoundState;
1569 localAddress = socketEngine->localAddress();
1570 localPort = socketEngine->localPort();
1572 emit q->stateChanged(state);
1576 if (q->isValid() && socketType == QAbstractSocket::UdpSocket)
1577 socketEngine->setReadNotificationEnabled(
true);
1647void QAbstractSocket::connectToHost(
const QString &hostName, quint16 port,
1649 NetworkLayerProtocol protocol)
1651 Q_D(QAbstractSocket);
1652#if defined(QABSTRACTSOCKET_DEBUG)
1653 qDebug(
"QAbstractSocket::connectToHost(\"%s\", %i, %i)...", qPrintable(hostName), port,
1657 if (d->state == ConnectedState || d->state == ConnectingState
1658 || d->state == ClosingState || d->state == HostLookupState) {
1659 qWarning(
"QAbstractSocket::connectToHost() called when already looking up or connecting/connected to \"%s\"", qPrintable(hostName));
1660 d->setErrorAndEmit(OperationError, tr(
"Trying to connect while connection is in progress"));
1664 d->preferredNetworkLayerProtocol = protocol;
1665 d->hostName = hostName;
1667 d->setReadChannelCount(0);
1668 d->setWriteChannelCount(0);
1669 d->abortCalled =
false;
1670 d->pendingClose =
false;
1671 if (d->state != BoundState) {
1672 d->state = UnconnectedState;
1674 d->localAddress.clear();
1677 d->peerAddress.clear();
1678 d->peerName = hostName;
1679 if (d->hostLookupId != -1) {
1680 QHostInfo::abortHostLookup(d->hostLookupId);
1681 d->hostLookupId = -1;
1684#ifndef QT_NO_NETWORKPROXY
1686 d->resolveProxy(hostName, port);
1687 if (d->proxyInUse.type() == QNetworkProxy::DefaultProxy) {
1689 d->setErrorAndEmit(UnsupportedSocketOperationError,
1690 tr(
"Operation on socket is not supported"));
1696 d->socketError = UnknownSocketError;
1697 if (openMode & QIODevice::Unbuffered)
1698 d->isBuffered =
false;
1699 else if (!d_func()->isBuffered)
1700 openMode |= QAbstractSocket::Unbuffered;
1702 QIODevice::open(openMode);
1703 d->readChannelCount = d->writeChannelCount = 0;
1705 d->state = HostLookupState;
1706 emit stateChanged(d->state);
1709 if (temp.setAddress(hostName)) {
1711 info.setAddresses(QList<QHostAddress>() << temp);
1712 d->_q_startConnecting(info);
1713#ifndef QT_NO_NETWORKPROXY
1714 }
else if (d->proxyInUse.capabilities() & QNetworkProxy::HostNameLookupCapability) {
1716 d->startConnectingByName(hostName);
1720 if (d->threadData.loadRelaxed()->hasEventDispatcher()) {
1723 bool immediateResultValid =
false;
1724 QHostInfo hostInfo = qt_qhostinfo_lookup(hostName,
1726 SLOT(_q_startConnecting(QHostInfo)),
1727 &immediateResultValid,
1729 if (immediateResultValid) {
1730 d->hostLookupId = -1;
1731 d->_q_startConnecting(hostInfo);
1736#if defined(QABSTRACTSOCKET_DEBUG)
1737 qDebug(
"QAbstractSocket::connectToHost(\"%s\", %i) == %s%s", hostName.toLatin1().constData(), port,
1738 (d->state == ConnectedState) ?
"true" :
"false",
1739 (d->state == ConnectingState || d->state == HostLookupState)
1740 ?
" (connection in progress)" :
"");
1748void QAbstractSocket::connectToHost(
const QHostAddress &address, quint16 port,
1751#if defined(QABSTRACTSOCKET_DEBUG)
1752 qDebug(
"QAbstractSocket::connectToHost([%s], %i, %i)...",
1753 address.toString().toLatin1().constData(), port, (
int) openMode);
1755 connectToHost(address.toString(), port, openMode);