Мангуст вещатель слушатель Unix - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь прослушать широковещательные сообщения 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 может вызвать проблемы, но я не знаю, как мне установить параметры сокета для приема трансляции.

...