Hello,
1. You need to resolve an IP adresses of each NIC use DNS api for that.
2. After you need to create sockets and bind to each IP address from the list.
3. Once you done - you can broadcast to each socket.
Brief functionality (this from my libraries but I describe somemain methods):
IPAddressList _list = DNS::GetHostAddresses();
for (int i = 0; i < _list.Length(); i++)
{
if (_list[i] == IPAddress::LoopBack()) continue;
Socket * pPulseSocket = new Socket(AddressFamily::Inet,SocketType::Dgram,Protocol::Udp);
BOOL bVal = TRUE;
setsockopt(*pPulseSocket,SOL_SOCKET,SO_REUSEADDR,(char *)&bVal, sizeof(bVal));
IPEntry _entry(_list[i],0);
if (pPulseSocket->Bind(_entry))
{
setsockopt(*pPulseSocket,SOL_SOCKET,SO_BROADCAST,(char *)&bVal, sizeof(bVal));
m_PulseSockets.AddTail(pPulseSocket);
}
else
{
delete pPulseSocket;
}
}
Resolve IP Addresses for given host name:
#include <WinDNS.h>
#pragma comment(lib,"Dnsapi.lib")
IPAddressList DNS::GetHostAddresses(const char * sDomain)
{
IPAddressList _list;
PDNS_RECORD pDnsRec;
if (DnsQuery_A(sDomain,DnsType::A,DNSQuery::Standard,NULL,&pDnsRec,NULL) == ERROR_SUCCESS)
{
PDNS_RECORD pDnsStart = pDnsRec;
while (pDnsRec)
{
if (pDnsRec->wType == DnsType::A)
{
IPAddress _ip(pDnsRec->Data.A.IpAddress,TRUE);
_list.Add(_ip);
}
pDnsRec = pDnsRec->pNext;
}
DnsRecordListFree(pDnsStart, DnsFreeRecordList);
}
return _list;
}
In code above used HostName not "localhost", HostName you can retrieve also via DNS API.
Other code I think simple to understand.
Regards,
Maxim.