我正在尝试使用C / C ++中的cesanta猫鼬收听广播的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上可以正常工作,并且我能够捕获消息。 但是它在setockopt的linux(Debian)上失败,错误22(无效参数)。
我认为猫鼬库是跨平台的,在这里我可能会缺少某些东西吗? 我读到IP_ADD_MEMBERSHIP选项可能会出现问题,但是我不知道如何设置套接字选项以接收广播。