From 11cb9c94db6e7c4d494faa071368179e1b4b4b4d Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Thu, 22 Jul 2010 17:01:51 +0200 Subject: Don't use WSAIoctl() to get/set the multicast socket options According to the MSDN docs, we can just use setsockopt() and getsockopt() like we do on UNIX, even if we are using Winsock2. --- src/network/socket/qnativesocketengine_win.cpp | 38 ++++++++------------------ 1 file changed, 12 insertions(+), 26 deletions(-) diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp index d2479f3..5580abc 100644 --- a/src/network/socket/qnativesocketengine_win.cpp +++ b/src/network/socket/qnativesocketengine_win.cpp @@ -402,19 +402,13 @@ int QNativeSocketEnginePrivate::option(QNativeSocketEngine::SocketOption opt) co n = SO_KEEPALIVE; break; case QNativeSocketEngine::MulticastTtlOption: - { - unsigned long val = 0; - if (WSAIoctl(socketDescriptor, SIO_MULTICAST_SCOPE, 0, 0, &val, sizeof(val), 0, 0 ,0) == 0) - return val; - return -1; - } + level = IPPROTO_IP; + n = IP_MULTICAST_TTL; + break; case QNativeSocketEngine::MulticastLoopbackOption: - { - unsigned long val = 0; - if (WSAIoctl(socketDescriptor, SIO_MULTIPOINT_LOOPBACK, 0, 0, &val, sizeof(val), 0, 0, 0) == 0) - return val; - return -1; - } + level = IPPROTO_IP; + n = IP_MULTICAST_LOOP; + break; } int v = -1; @@ -476,21 +470,13 @@ bool QNativeSocketEnginePrivate::setOption(QNativeSocketEngine::SocketOption opt n = SO_KEEPALIVE; break; case QNativeSocketEngine::MulticastTtlOption: - { - unsigned long val = v, outval; - if (WSAIoctl(socketDescriptor, SIO_MULTICAST_SCOPE, &val, sizeof(val), &outval, sizeof(outval), 0, 0, 0) == 0) - return true; - WS_ERROR_DEBUG(WSAGetLastError()); - return false; - } + level = IPPROTO_IP; + n = IP_MULTICAST_TTL; + break; case QNativeSocketEngine::MulticastLoopbackOption: - { - unsigned long val = v, outval; - if (WSAIoctl(socketDescriptor, SIO_MULTIPOINT_LOOPBACK, &val, sizeof(val), &outval, sizeof(outval), 0, 0, 0) == 0) - return true; - WS_ERROR_DEBUG(WSAGetLastError()); - return false; - } + level = IPPROTO_IP; + n = IP_MULTICAST_LOOP; + break; } if (::setsockopt(socketDescriptor, level, n, (char*)&v, sizeof(v)) != 0) { -- cgit v0.12