我正在尝试找到一种方法将IPv4 UDP套接字绑定到Micrium中的广播地址(μC/ OS-Ⅲ)。
尝试将套接字绑定到实际广播地址只返回NET_SOCK_ERR_INVALID_ADDR
。在NetSock_Bind
调用文档中要绑定的事物列表中未明确提及广播,也没有SO_BROADCAST
的类似物。根本不可能吗?
作为最后的手段,我可以将广播地址添加到现有接口作为自己的地址(这不应该弄乱ARP,因为没有人会要求它,我不会发送任何东西通过它)?
答案 0 :(得分:0)
看看micrium documentation。 按照步骤操作,您将不会收到任何错误。
顺便说一句,如果您不使用NetApp_SetSockAddr
并尝试使用NetSock_Bind
进行绑定,您将收到发生在您身上的NET_SOCK_ERR_INVALID_ADDR
。
修改强>
查看下一个适用于我的代码。
请注意,IP地址I手动初始化主机的地址并使用定义的地址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()
函数所说的是,如果我调用它而不是手动初始化主机,它会返回您收到的错误。