我试图在 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 可能会出现问题,但我不知道应该如何设置套接字选项来接收广播。