| 1 |
#pragma once |
| 2 |
|
| 3 |
#include "stdafx.h" |
| 4 |
#include "SocketX.h" |
| 5 |
|
| 6 |
////////////////////////////////////////////////////////////////////////// |
| 7 |
|
| 8 |
IMPLEMENT_DYNAMIC(CBcastSocket, CBcastSocket) |
| 9 |
|
| 10 |
CBcastSocket::CBcastSocket() : |
| 11 |
m_fBcast(FALSE) |
| 12 |
{ |
| 13 |
ZeroMemory(&m_BcastAddr, sizeof(m_BcastAddr)); |
| 14 |
} |
| 15 |
|
| 16 |
CBcastSocket::~CBcastSocket() |
| 17 |
{ |
| 18 |
} |
| 19 |
|
| 20 |
BOOL CBcastSocket::SetBroadcast(DWORD dwLocalAddress, DWORD dwMaskAddress, WORD wPort) |
| 21 |
{ |
| 22 |
return SetBroadcast(((dwLocalAddress & dwMaskAddress) | (~dwMaskAddress)), wPort); |
| 23 |
} |
| 24 |
|
| 25 |
BOOL CBcastSocket::SetBroadcast(DWORD dwBcastAddress, WORD wPort) |
| 26 |
{ |
| 27 |
SOCKADDR_IN sAddrIn; |
| 28 |
BOOL flag = TRUE; |
| 29 |
|
| 30 |
if (!SetSockOpt(SO_BROADCAST, (LPSTR)&flag, sizeof(flag))) |
| 31 |
{ |
| 32 |
return FALSE; |
| 33 |
} |
| 34 |
|
| 35 |
sAddrIn.sin_family = AF_INET; |
| 36 |
sAddrIn.sin_port = htons(wPort); |
| 37 |
sAddrIn.sin_addr.s_addr = dwBcastAddress; |
| 38 |
|
| 39 |
CopyMemory(&m_BcastAddr, &sAddrIn, sizeof(m_BcastAddr)); |
| 40 |
m_fBcast = TRUE; |
| 41 |
|
| 42 |
return TRUE; |
| 43 |
} |
| 44 |
|
| 45 |
BOOL CBcastSocket::ResetBroadcast() |
| 46 |
{ |
| 47 |
BOOL flag = FALSE; |
| 48 |
|
| 49 |
if (!SetSockOpt(SO_BROADCAST, (LPSTR)&flag, sizeof(flag))) |
| 50 |
{ |
| 51 |
return FALSE; |
| 52 |
} |
| 53 |
|
| 54 |
ZeroMemory(&m_BcastAddr, sizeof(m_BcastAddr)); |
| 55 |
m_fBcast = FALSE; |
| 56 |
|
| 57 |
return TRUE; |
| 58 |
} |
| 59 |
|
| 60 |
BOOL CBcastSocket::Broadcast(const CByteArray &data) |
| 61 |
{ |
| 62 |
if (!m_fBcast) |
| 63 |
{ |
| 64 |
TRACE("***** ERROR: Broadcast(Socket isn't Broadcast socket) *****\n"); |
| 65 |
return FALSE; |
| 66 |
} |
| 67 |
|
| 68 |
if (!SendTo(data, &m_BcastAddr, sizeof(m_BcastAddr))) |
| 69 |
{ |
| 70 |
TRACE1("***** ERROR: Broadcast(%d) *****\n", GetLastError()); |
| 71 |
return FALSE; |
| 72 |
} |
| 73 |
|
| 74 |
return TRUE; |
| 75 |
} |
| 76 |
|
| 77 |
|
| 78 |
////////////////////////////////////////////////////////////////////////// |