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);