将套接字绑定到特定网络

时间:2013-06-24 07:20:12

标签: c++ udp

我的计算机已连接到多个网络,例如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的消息?

1 个答案:

答案 0 :(得分: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)