2013-06-24 58 views
0

我的电脑连接到多个网络,如Network ANetwork B。 我想仅接收来自网络B的UDP广播数据包。将套接字绑定到特定网络

目前,我打开一个UDP套接字并将其绑定到INADDR_ANY。

sockaddr_in address; 
address.sin_family = AF_INET; 
address.sin_addr.s_addr = INADDR_ANY; 
address.sin_port = htons((unsigned short) 11000); 

if (bind(handle, (const sockaddr*) &address, sizeof(sockaddr_in)) < 0) 
{ 
     //Operation Failed! 
     return false; 
} 

如何确保我会收到来自仅网络B的消息?

回答

2

广播地址要与所有-1位结束,所以假设 “hoNetAddr” 是一台主机有序地址:

uint32_t hoBcastAddr = (hoNetAddr & hoNetMask) | (~hoNetMask); 
// e.g. 192.168.0.0/255.255.255.0 => 
//  (C0A80000 & FFFFFF00) | (/*inverted netmask*/ 000000FF) 
// broadcast is: C0A800FF 
address.sin_addr.s_addr = htonl(hoBcastAddr); 

(假设IPv4)的

+2

是不是'(〜0 &〜hoNetMask)'相当于'(〜hoNetMask)'? – Hasturkun

+0

是的,我的目标是简洁明了。将编辑。 – kfsone

相关问题