1

我试图在 C/C++ 中使用 cesanta mongoose 收听广播 udp 消息。

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 上运行良好,我能够捕捉到这些消息。但是它在 setsockopt 上的 linux (Debian) 上失败,错误为 22(无效参数)。

我以为猫鼬库是跨平台的,这里有什么我可能会丢失的吗?我读到选项 IP_ADD_MEMBERSHIP 可能会出现问题,但我不知道应该如何设置套接字选项来接收广播。

4

0 回答 0