永发信息网

linux加入组播失败

答案:2  悬赏:20  手机版
解决时间 2021-04-05 02:22
  • 提问者网友:温柔港
  • 2021-04-04 12:00
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr("224.0.0.251");
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
int err = setsockopt(sock_fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));
为什么err是小于0的,说明加入组播失败
错误是no such device
最佳答案
  • 五星知识达人网友:第四晚心情
  • 2021-04-04 12:47
What does "IP_ADD_MEMBERSHIP: No such device" mean?
It means that the tool is trying to use multicast but the network interface doesn't support it There are two likely causes:
·Your machine doesn't have multicast support enabled. For example, on Linux and FreeBSD it is possible to compile a kernel which doesn't support multicast.
·You don't have a route for multicast traffic. Some systems don't add this by default, and you need to run:
route add -net 224.0.0.0 netmask 224.0.0.0 eth0(or similar). If you wish to use RAT in unicast mode only, it is possible to add the multicast route on the loopback interface.
我一般都这样写:
mreq.imr_interface.s_addr = htonl(localIP);
全部回答
  • 1楼网友:我住北渡口
  • 2021-04-04 13:27
这就要有pim(protocol independent multicast,协议无关组播组)协议的支持,就必须在linux环境下安装pimd软件协议包。 安装补丁文件 安装pimd软件协议包需要两个补丁文件:pimkern-freebsd-4.6.patch和netstat-freebsd-4.6.patch。安装步骤如下: 首先将两个补丁文件拷贝到/usr/src/目录下,并执行以下命令:#patch -p2 < netstat-freebsd-4.6.patch #patch -p2 < pimkern-freebsd-4.6.patch 执行以下命令,编译并安装netstat:#cd /usr/src/usr.bin/netstat #make #make install 重新编译内核 执行以下命令,修改multi配置文件:#cd /usr/src/sys/i386/conf/ #cp genric multi #vi multi 在multi配置文件中,加入下列两行代码:options mrouting options pim 保存并退出vi编辑器。 在当前multi配置文件所在的目录执行以下命令:#config multi #cd /usr/src/sys/compile/multi/ #make depend #make #make install 至此,新内核编译完毕。 备份kernel文件 新内核编译完毕后,在重新启动前,要先将根目录下原有的kernel文件进行备份。#cd / #mv kernel kernel.old 若提示“operation not permitted”,则需要先执行以下命令:#chflags noschg /kernel 备份kernel文件后执行以下命令:#cp /usr/src/sys/compile/multi/kernel /kernel 在系统重新启动后,默认选择的便是新编译的内核。 安装pimd软件协议包 linux下pimd软件协议包代码的起源有两个地方,一个是日本的kame项目组,另一个是南加州大学信息科学学院。到这两个组织的主页上都可以下载所需要的pimd-current.tar.gz 协议包和上面提到的两个补丁。 用以下命令解压缩 pimd-current.tar.gz 软件包,并安装:#tar zxf pimd-current.tar.gz #cd pimd-2.1.0-alpha29.16 #make #make install 以上命令执行过程中可能会出现错误,需要手工将其完成,拷贝当前目录下的pimd文件:#cp pimd /usr/local/bin/ #chmod 755 pimd #cp pimd.conf /etc/ 至此,pimd软件协议包安装完毕。还需要打开linux系统的路由转发功能,才能实现组播包的转发,即在配置文件rc.conf中增加以下代码,重启后生效。作者:龙宇翔 苑庆国
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯