Как привязать к широковещательному адресу в Micrium

Я пытаюсь найти способ привязать сокет IPv4 UDP к широковещательному адресу в Micrium (µC/OS-Ⅲ).

Попытка привязать сокет к фактическому широковещательному адресу просто возвращает NET_SOCK_ERR_INVALID_ADDR, Трансляция прямо не упоминается в списке вещей, которые необходимо связать с NetSock_Bind вызов документации, аналога нет SO_BROADCAST или. Это вообще невозможно?

Могу ли я в качестве крайней меры добавить широковещательный адрес к существующему интерфейсу в качестве его собственного адреса (это не должно мешать ARP, так как никто не собирается его запрашивать, и я не собираюсь ничего через него отправлять)?

1 ответ

Посмотрите документацию 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() Функция заключается в том, что если я вызываю его вместо ручной инициализации хоста, он возвращает полученную ошибку.

Другие вопросы по тегам