Tag: 组播

多播接收器套接字中的重复数据包

以下MulticastReceiver实现中似乎存在错误。 在为和创建两个实例时,我在每个流中获取两个包。 有什么指针吗? 我的猜测是REUSEADDR? class MulticastReceiverSocket { protected: const std::string listen_ip_; const int listen_port_; int socket_file_descriptor_; public: MulticastReceiverSocket ( const std::string & listen_ip, const int listen_port ) : listen_ip_ ( listen_ip ), listen_port_ ( listen_port ), socket_file_descriptor_ ( -1 ) { /* create socket to join multicast group on */ socket_file_descriptor_ = socket ( AF_INET, […]

Netlink多播内核组

我试图实现的任务实际上非常简单(将字符串“TEST”多播到userland守护程序),但内核模块不能编译。 它会因错误而停止: passing argument 4 of ‘genlmsg_multicast_allns’ makes integer from pointer without a cast [enabled by default] 但它不应该只是我定义的组播组吗? 以下是“澄清”的代码: #include #include #include #include #include #include #include struct sock *nl_sk = NULL; static void daemon(void){ struct sk_buff *skb; void* msg_head; unsigned char *msg; struct genl_family my_genl_family = { .id = GENL_ID_GENERATE, .hdrsize = 0, .name = […]

链接范围IPv6多播数据包突然无法在MacBook Pro上路由?

这是一个有点模糊的问题,但我很难过,我想也许有人可能会对这个问题有更多的线索。 我的同事已成功运行一个内部应用程序,在他的MacBook Pro上使用IPv6多播几个月,但今天Mac决定停止路由多播数据包。 特别是,程序打印此错误: 网络接口上的SendDataUDP(ff02 :: bead:cede:deed:feed @ 4)失败[名称= [en0]描述= [] IP = [fe80 :: 222:41ff:fe21:dfd4 @ 4]网络掩码= [ffff: ffff:ffff:ffff ::] Broadcast = [::]](错误= 65 /无主机路由)。 …它很好地描述了出错的地方……它试图将UDP数据包发送到所显示的IP地址,并且发送()失败并使用errno = EHOSTUNREACH。 我不明白的是,什么可能导致IPv6链路范围多播地址“无法访问”? 如果我对链路范围组播的理解是正确的,那么数据包只需要从本地以太网端口出来(在这种情况下为en0,它在该机器上运行)。 我缺少多播的某些方面,还是他的机器只是被塞了? 他说他没有改变什么,只是神秘地停止了工作。

在同一端口上接收多个组播源 – C,Linux

我有一个应用程序从同一端口上的多个组播源接收数据。 我能够收到数据。 但是,我试图考虑每个组的统计信息(即收到的消息,收到的字节数),并且所有数据都混淆了。 有谁知道如何解决这个问题? 如果我试着查看发件人的地址,那么它不是多播地址,而是发送机器的IP。 我使用以下套接字选项: struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = inet_addr(“224.1.2.3”); mreq.imr_interface.s_addr = INADDR_ANY; setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); 并且: setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &reuse, sizeof(reuse));