如何绑定到Micrium中的广播地址



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

尝试将套接字绑定到实际广播地址,只是返回NET_SOCK_ERR_INVALID_ADDR。在NetSock_Bind调用文档上绑定的事物列表中,没有明确提到广播,也没有SO_BROADCAST的类似物。根本不可能吗?

我可以作为最后的手段,在现有界面中添加一个广播地址作为其自己的地址(这不应该弄乱ARP,因为没有人会要求它,而且我不会发送任何东西通过它)?

查看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()函数的内容是,如果我称其为"命名"而不是手动初始化主机,它将返回您收到的错误。

相关内容

  • 没有找到相关文章

最新更新