2013-06-24 59 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

相關問題