1

我正在尝试找到一种将 IPv4 UDP 套接字绑定到 Micrium (µC/OS-Ⅲ) 中的广播地址的方法。

尝试将套接字绑定到实际广播地址只会返回NET_SOCK_ERR_INVALID_ADDR。广播没有在呼叫文档上的绑定列表中明确提及NetSock_Bind,也没有类似的内容SO_BROADCAST。这根本不可能吗?

作为最后的手段,我是否可以将广播地址添加到现有接口作为其自己的地址(这不应该弄乱 ARP,因为没有人会要求它,我也不会通过它发送任何东西) ?

4

1 回答 1

0

查看micrium 文档。按照步骤操作,您将不会收到任何错误。

顺便说一句,如果您不使用NetApp_SetSockAddr并尝试使用绑定NetSock_Bind,您将收到NET_SOCK_ERR_INVALID_ADDR发生在您身上的事情。

编辑:

看看下一个代码,它对我有用。注意IP地址我手动初始化了主机的地址,使用了定义好的地址NET_SOCK_ADDR_IP_V4_WILDCARD

NET_SOCK_ADDR_IPv4 host;
NET_ERR perr;

Mem_Clr(&host, sizeof(host));
host.AddrFamily = NET_SOCK_ADDR_FAMILY_IP_V4;
host.Addr = NET_UTIL_HOST_TO_NET_32(NET_SOCK_ADDR_IP_V4_WILDCARD);
host.Port = NET_UTIL_HOST_TO_NET_16(socketPort);

netSockId = NetSock_Open( NET_SOCK_PROTOCOL_FAMILY_IP_V4, 
                          NET_SOCK_TYPE_DATAGRAM,
                          NET_SOCK_PROTOCOL_UDP,
                         &perr);

if (perr != NET_SOCK_ERR_NONE)
{
    // log the error.
    return;
}

NetSock_Bind(                 netSockId,
             (NET_SOCK_ADDR*)&host,
                              NET_SOCK_ADDR_SIZE,
                             &perr);
if (perr != NET_SOCK_ERR_NONE)
{
    // log the error.
    return;
}

我所说的NetApp_SetSockAddr()函数是,如果我调用它而不是手动初始化主机,它会返回您收到的错误。

于 2016-11-28T08:55:19.010 回答