Я пытаюсь прослушать широковещательные сообщения udp, используя cesanta mongoose в C / C ++.
mgr = new mg_mgr();
struct ip_mreq group;
mg_mgr_init(mgr, this);
{
char listen[256];
snprintf(listen, sizeof(listen), "udp://%d", _port);
nc = mg_bind(mgr, listen, ev_handler);
}
if (nc == NULL)
{
strerror(errno);
return errno;
}
group.imr_multiaddr.s_addr = inet_addr("0.0.0.0");
group.imr_interface.s_addr = inet_addr(INADDR_ANY);
if (setsockopt(nc->sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&group, sizeof(group)) < 0)
{
strerror(errno);
return errno;
}
while(true)
mg_mgr_poll(mgr, 0);
Он отлично работает на Windows, и я могу ловить сообщения.
НО это терпит неудачу на linux (Debian) на setsockopt с ошибкой 22 (неверный аргумент).
Я думал, что библиотека Мангуста была кроссплатформенной, есть что-то, что я мог бы здесь упустить?
Я читал, что опция IP_ADD_MEMBERSHIP может вызвать проблемы, но я не знаю, как мне установить параметры сокета для приема трансляции.