qnativesocketengine_win.cpp: Use QOperatingSystemVersion to detect OS

Fix warning:
socket\qnativesocketengine_win.cpp: In member function 'bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType, QAbstractSocket::NetworkLayerProtocol&)':
socket\qnativesocketengine_win.cpp:337:26: warning: 'WinVersion' is deprecated: Use QOperatingSystemVersion [-Wdeprecated-declarations]
     QSysInfo::WinVersion osver = QSysInfo::windowsVersion();
                          ^
In file included from ..\..\include/QtCore/qsysinfo.h:1:0,
                 from ..\..\include\QtCore/../../src/corelib/global/qglobal.h:1150,
                 from ..\..\include\QtCore/qglobal.h:1,
                 from ..\corelib\global\qt_pch.h:56:
     enum QT_DEPRECATED_X("Use QOperatingSystemVersion") WinVersion {

Change-Id: I9b060d886af3b627ac4b6eeb3321629734cc1e46
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
This commit is contained in:
Friedemann Kleint 2016-11-25 10:35:24 +01:00
parent 26e2c6b74f
commit e26c59e564

View File

@ -51,6 +51,8 @@
#include <qdebug.h>
#include <qdatetime.h>
#include <qnetworkinterface.h>
#include <qoperatingsystemversion.h>
#include <qversionnumber.h>
//#define QNATIVESOCKETENGINE_DEBUG
#if defined(QNATIVESOCKETENGINE_DEBUG)
@ -334,11 +336,12 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc
return false;
}
QSysInfo::WinVersion osver = QSysInfo::windowsVersion();
const QVersionNumber osVersion = QOperatingSystemVersion::current().toVersionNumber();
const QVersionNumber windows7Version = QVersionNumber(6, 1);
//Windows XP and 2003 support IPv6 but not dual stack sockets
int protocol = (socketProtocol == QAbstractSocket::IPv6Protocol
|| (socketProtocol == QAbstractSocket::AnyIPProtocol && osver >= QSysInfo::WV_6_0)) ? AF_INET6 : AF_INET;
|| (socketProtocol == QAbstractSocket::AnyIPProtocol)) ? AF_INET6 : AF_INET;
int type = (socketType == QAbstractSocket::UdpSocket) ? SOCK_DGRAM : SOCK_STREAM;
// MSDN KB179942 states that on winnt 4 WSA_FLAG_OVERLAPPED is needed if socket is to be non blocking
@ -352,12 +355,12 @@ bool QNativeSocketEnginePrivate::createNewSocket(QAbstractSocket::SocketType soc
SOCKET socket = INVALID_SOCKET;
// Windows 7 or later, try the new API
if ((osver & QSysInfo::WV_NT_based) >= QSysInfo::WV_6_1)
if (osVersion >= windows7Version)
socket = ::WSASocket(protocol, type, 0, NULL, 0, WSA_FLAG_NO_HANDLE_INHERIT | WSA_FLAG_OVERLAPPED);
// previous call fails if the windows 7 service pack 1 or hot fix isn't installed.
// Try the old API if the new one failed on Windows 7, or always on earlier versions
if (socket == INVALID_SOCKET && ((osver & QSysInfo::WV_NT_based) <= QSysInfo::WV_6_1)) {
if (socket == INVALID_SOCKET && osVersion <= windows7Version) {
socket = ::WSASocket(protocol, type, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
#ifdef HANDLE_FLAG_INHERIT
if (socket != INVALID_SOCKET) {