Network/SocketImpl: Add query methods

I'm still not sure I will use them


Former-commit-id: 1c023a51372b6864ebd7f09142ff9adeced72dd0
This commit is contained in:
Lynix 2015-11-16 10:05:45 +01:00
parent 1b4ac70ac3
commit 0cda3c1d14
2 changed files with 60 additions and 0 deletions

View File

@ -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<char*>(&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<char*>(&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<char*>(&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");

View File

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