diff options
Diffstat (limited to 'src/network/socket/qabstractsocket.cpp')
-rw-r--r-- | src/network/socket/qabstractsocket.cpp | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 0f13b1d1b8..13e10e4102 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -387,6 +387,11 @@ (see \l{QAbstractSocket::}{setReadBufferSize()}). This enum value has been introduced in Qt 5.3. + \value PathMtuSocketOption Retrieves the Path Maximum Transmission Unit + (PMTU) value currently known by the IP stack, if any. Some IP stacks also + allow setting the MTU for transmission. + This enum value was introduced in Qt 5.11. + Possible values for \e{TypeOfServiceOption} are: \table @@ -940,7 +945,9 @@ void QAbstractSocketPrivate::resolveProxy(const QString &hostname, quint16 port) // DefaultProxy here will raise an error proxyInUse = QNetworkProxy(); } +#endif // !QT_NO_NETWORKPROXY +#if !defined(QT_NO_NETWORKPROXY) || defined(Q_OS_WINRT) /*! \internal @@ -982,7 +989,7 @@ void QAbstractSocketPrivate::startConnectingByName(const QString &host) emit q->stateChanged(state); } -#endif +#endif // !QT_NO_NETWORKPROXY || Q_OS_WINRT /*! \internal @@ -1114,10 +1121,6 @@ void QAbstractSocketPrivate::_q_connectToNextAddress() // (localhost address on BSD or any UDP connect), emit // connected() and return. if ( -#if defined(Q_OS_WINRT) && _MSC_VER >= 1900 - !qEnvironmentVariableIsEmpty("QT_WINRT_USE_THREAD_NETWORK_CONTEXT") ? - socketEngine->connectToHostByName(hostName, port) : -#endif socketEngine->connectToHost(host, port)) { //_q_testConnection(); fetchConnectionParameters(); @@ -1356,15 +1359,29 @@ void QAbstractSocketPrivate::fetchConnectionParameters() } state = QAbstractSocket::ConnectedState; - emit q->stateChanged(state); - emit q->connected(); - #if defined(QABSTRACTSOCKET_DEBUG) qDebug("QAbstractSocketPrivate::fetchConnectionParameters() connection to %s:%i established", host.toString().toLatin1().constData(), port); #endif + emit q->stateChanged(state); + emit q->connected(); } +/*! \internal +*/ +qint64 QAbstractSocketPrivate::skip(qint64 maxSize) +{ + // if we're not connected, return -1 indicating EOF + if (!socketEngine || !socketEngine->isValid() || state != QAbstractSocket::ConnectedState) + return -1; + + // Caller, QIODevice::skip(), has ensured buffer is empty. So, wait + // for more data in buffered mode. + if (isBuffered) + return 0; + + return QIODevicePrivate::skip(maxSize); +} void QAbstractSocketPrivate::pauseSocketNotifiers(QAbstractSocket *socket) { @@ -1696,6 +1713,8 @@ void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, } #endif + // Sync up with error string, which open() shall clear. + d->socketError = UnknownSocketError; if (openMode & QIODevice::Unbuffered) d->isBuffered = false; else if (!d_func()->isBuffered) @@ -1704,6 +1723,7 @@ void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, QIODevice::open(openMode); d->readChannelCount = d->writeChannelCount = 0; +#ifndef Q_OS_WINRT d->state = HostLookupState; emit stateChanged(d->state); @@ -1741,6 +1761,10 @@ void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, (d->state == ConnectingState || d->state == HostLookupState) ? " (connection in progress)" : ""); #endif +#else // !Q_OS_WINRT + // On WinRT we should always connect by name. Lookup and proxy handling are done by the API. + d->startConnectingByName(hostName); +#endif } /*! \overload @@ -1926,6 +1950,8 @@ bool QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, SocketState return false; } + // Sync up with error string, which open() shall clear. + d->socketError = UnknownSocketError; if (d->threadData->hasEventDispatcher()) d->socketEngine->setReceiver(d); @@ -2006,6 +2032,10 @@ void QAbstractSocket::setSocketOption(QAbstractSocket::SocketOption option, cons case ReceiveBufferSizeSocketOption: d_func()->socketEngine->setOption(QAbstractSocketEngine::ReceiveBufferSocketOption, value.toInt()); break; + + case PathMtuSocketOption: + d_func()->socketEngine->setOption(QAbstractSocketEngine::PathMtuInformation, value.toInt()); + break; } } @@ -2048,6 +2078,10 @@ QVariant QAbstractSocket::socketOption(QAbstractSocket::SocketOption option) case ReceiveBufferSizeSocketOption: ret = d_func()->socketEngine->option(QAbstractSocketEngine::ReceiveBufferSocketOption); break; + + case PathMtuSocketOption: + ret = d_func()->socketEngine->option(QAbstractSocketEngine::PathMtuInformation); + break; } if (ret == -1) return QVariant(); |