【问题标题】:Binding a socket to specific network将套接字绑定到特定网络
【发布时间】:2013-06-25 00:45:28
【问题描述】:

我的电脑连接到多个网络,例如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 的消息?

【问题讨论】:

    标签: c++ udp


    【解决方案1】:

    广播地址将以全 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)

    【讨论】:

    • (~0 &amp; ~hoNetMask)不等于(~hoNetMask)吗?
    猜你喜欢
    • 2013-01-06
    • 2019-09-05
    • 2016-01-15
    • 2016-10-23
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多