diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2017-08-20 15:50:41 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2017-11-14 15:54:51 +0000 |
commit | aaa187cd9951b71127c11c375e6a3954a187e1d3 (patch) | |
tree | 54dcee410994b3d64058ed6dde9e95c519fee83a /src/network/socket/qnativesocketengine_win.cpp | |
parent | aa494d826ace02ffff5f29ae20b7738630913777 (diff) |
QAbstractSocket: Add socketOption for the Path MTU
This allow retrieving the value of the known PMTU for the current
socket. This works on Linux (IPv6 and IPv4) and FreeBSD (IPv6 only) --
the other OSes don't have the necessary API.
Note: do we need add IP_MTU_DISCOVER?
Change-Id: I6e9274c1e7444ad48c81fffd14dcaf97a18ce335
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/network/socket/qnativesocketengine_win.cpp')
-rw-r--r-- | src/network/socket/qnativesocketengine_win.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp index 1ec3df842f..fb31607e2c 100644 --- a/src/network/socket/qnativesocketengine_win.cpp +++ b/src/network/socket/qnativesocketengine_win.cpp @@ -209,7 +209,7 @@ static inline void qt_socket_getPortAndAddress(SOCKET socketDescriptor, const qt static void convertToLevelAndOption(QNativeSocketEngine::SocketOption opt, QAbstractSocket::NetworkLayerProtocol socketProtocol, int &level, int &n) { - n = 0; + n = -1; level = SOL_SOCKET; // default switch (opt) { @@ -281,6 +281,9 @@ static void convertToLevelAndOption(QNativeSocketEngine::SocketOption opt, n = IP_HOPLIMIT; } break; + + case QAbstractSocketEngine::PathMtuInformation: + break; // not supported on Windows } } @@ -471,9 +474,11 @@ int QNativeSocketEnginePrivate::option(QNativeSocketEngine::SocketOption opt) co QT_SOCKOPTLEN_T len = sizeof(v); convertToLevelAndOption(opt, socketProtocol, level, n); - if (getsockopt(socketDescriptor, level, n, (char *) &v, &len) == 0) - return v; - WS_ERROR_DEBUG(WSAGetLastError()); + if (n != -1) { + if (getsockopt(socketDescriptor, level, n, (char *) &v, &len) == 0) + return v; + WS_ERROR_DEBUG(WSAGetLastError()); + } return -1; } @@ -514,6 +519,8 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt int n, level; convertToLevelAndOption(opt, socketProtocol, level, n); + if (n == -1) + return false; if (::setsockopt(socketDescriptor, level, n, (char*)&v, sizeof(v)) != 0) { WS_ERROR_DEBUG(WSAGetLastError()); return false; |