Network/UdpSocket: Add broadcasting option

Former-commit-id: bde428efc5e9c77cf3e64ec04d58d72613f1d8de
This commit is contained in:
Lynix
2015-11-12 13:35:46 +01:00
parent 81221fbf0b
commit f28e1a7d9b
5 changed files with 42 additions and 0 deletions

View File

@@ -26,6 +26,17 @@ namespace Nz
return state;
}
void UdpSocket::EnableBroadcasting(bool broadcasting)
{
NazaraAssert(m_handle != SocketImpl::InvalidHandle, "Invalid handle");
if (m_isBroadCastingEnabled != broadcasting)
{
SocketImpl::SetBroadcasting(m_handle, broadcasting, &m_lastError);
m_isBroadCastingEnabled = broadcasting;
}
}
unsigned int UdpSocket::QueryMaxDatagramSize()
{
NazaraAssert(m_handle != SocketImpl::InvalidHandle, "Socket hasn't been created");
@@ -73,6 +84,7 @@ namespace Nz
void UdpSocket::OnOpened()
{
m_boundAddress = IpAddress::Invalid;
m_isBroadCastingEnabled = false;
UpdateState(SocketState_NotConnected);
}

View File

@@ -509,6 +509,25 @@ namespace Nz
return true;
}
bool SocketImpl::SetBroadcasting(SocketHandle handle, bool broadcasting, SocketError* error)
{
NazaraAssert(handle != InvalidHandle, "Invalid handle");
BOOL option = broadcasting;
if (setsockopt(handle, SOL_SOCKET, SO_BROADCAST, reinterpret_cast<const char*>(&option), sizeof(option)) == SOCKET_ERROR)
{
if (error)
*error = TranslateWSAErrorToSocketError(WSAGetLastError());
return false; //< Error
}
if (error)
*error = SocketError_NoError;
return true;
}
bool SocketImpl::SetKeepAlive(SocketHandle handle, bool enabled, UInt64 msTime, UInt64 msInterval, SocketError* error)
{

View File

@@ -47,6 +47,7 @@ namespace Nz
static bool SendTo(SocketHandle handle, const void* buffer, int length, const IpAddress& to, int* sent, SocketError* error);
static bool SetBlocking(SocketHandle handle, bool blocking, SocketError* error = nullptr);
static bool SetBroadcasting(SocketHandle handle, bool broadcasting, SocketError* error = nullptr);
static bool SetKeepAlive(SocketHandle handle, bool enabled, UInt64 msTime, UInt64 msInterval, SocketError* error = nullptr);
static bool SetNoDelay(SocketHandle handle, bool nodelay, SocketError* error = nullptr);