From 0cda3c1d145b9020e2224105f55ce567a37e1386 Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 16 Nov 2015 10:05:45 +0100 Subject: [PATCH] Network/SocketImpl: Add query methods I'm still not sure I will use them Former-commit-id: 1c023a51372b6864ebd7f09142ff9adeced72dd0 --- src/Nazara/Network/Win32/SocketImpl.cpp | 57 +++++++++++++++++++++++++ src/Nazara/Network/Win32/SocketImpl.hpp | 3 ++ 2 files changed, 60 insertions(+) diff --git a/src/Nazara/Network/Win32/SocketImpl.cpp b/src/Nazara/Network/Win32/SocketImpl.cpp index 37c435c9e..7fd34405a 100644 --- a/src/Nazara/Network/Win32/SocketImpl.cpp +++ b/src/Nazara/Network/Win32/SocketImpl.cpp @@ -275,6 +275,44 @@ namespace Nz return availableBytes; } + bool SocketImpl::QueryBroadcasting(SocketHandle handle, SocketError* error) + { + BOOL code; + int codeLength = sizeof(code); + + if (getsockopt(handle, SOL_SOCKET, SO_BROADCAST, reinterpret_cast(&code), &codeLength) == SOCKET_ERROR) + { + if (error) + *error = TranslateWSAErrorToSocketError(WSAGetLastError()); + + return false; + } + + if (error) + *error = SocketError_NoError; + + return code == TRUE; + } + + bool SocketImpl::QueryKeepAlive(SocketHandle handle, SocketError* error) + { + BOOL code; + int codeLength = sizeof(code); + + if (getsockopt(handle, SOL_SOCKET, SO_KEEPALIVE, reinterpret_cast(&code), &codeLength) == SOCKET_ERROR) + { + if (error) + *error = TranslateWSAErrorToSocketError(WSAGetLastError()); + + return false; + } + + if (error) + *error = SocketError_NoError; + + return code == TRUE; + } + unsigned int SocketImpl::QueryMaxDatagramSize(SocketHandle handle, SocketError* error) { unsigned int code; @@ -294,6 +332,25 @@ namespace Nz return code; } + bool SocketImpl::QueryNoDelay(SocketHandle handle, SocketError* error) + { + BOOL code; + int codeLength = sizeof(code); + + if (getsockopt(handle, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&code), &codeLength) == SOCKET_ERROR) + { + if (error) + *error = TranslateWSAErrorToSocketError(WSAGetLastError()); + + return false; + } + + if (error) + *error = SocketError_NoError; + + return code == TRUE; + } + IpAddress SocketImpl::QueryPeerAddress(SocketHandle handle, SocketError* error) { NazaraAssert(handle != InvalidHandle, "Invalid handle"); diff --git a/src/Nazara/Network/Win32/SocketImpl.hpp b/src/Nazara/Network/Win32/SocketImpl.hpp index ad58c76f0..8f6b1f72d 100644 --- a/src/Nazara/Network/Win32/SocketImpl.hpp +++ b/src/Nazara/Network/Win32/SocketImpl.hpp @@ -36,7 +36,10 @@ namespace Nz static SocketState Listen(SocketHandle handle, const IpAddress& address, unsigned queueSize, SocketError* error); static unsigned int QueryAvailableBytes(SocketHandle handle, SocketError* error = nullptr); + static bool QueryBroadcasting(SocketHandle handle, SocketError* error = nullptr); + static bool QueryKeepAlive(SocketHandle handle, SocketError* error = nullptr); static unsigned int QueryMaxDatagramSize(SocketHandle handle, SocketError* error = nullptr); + static bool QueryNoDelay(SocketHandle handle, SocketError* error = nullptr); static IpAddress QueryPeerAddress(SocketHandle handle, SocketError* error = nullptr); static IpAddress QuerySocketAddress(SocketHandle handle, SocketError* error = nullptr);