从Linux上的特定网络接口接收多播
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从Linux上的特定网络接口接收多播,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含842字,纯文字阅读大概需要2分钟。
内容图文
![从Linux上的特定网络接口接收多播](/upload/InfoBanner/zyjiaocheng/971/2e241fe631784e3b9d4a3388cdb7a237.jpg)
我正在尝试从CentOS 5.5上的特定网络接口接收组播数据
sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(1234);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sd, (sockaddr*)&addr, sizeof(sockaddr_in));
setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, "eth0", 5);
但是我收到了来自所有接口的数据包.
怎么了?
解决方法:
首先,在这种情况下检查您的任何调用是否失败,socket,bind,setsockopt.使用perror()函数打印错误消息将帮助您诊断问题.
但是,对于接收多播数据报,您可能需要在使用IP_ADD_MEMBERSHIP套接字选项加入多播组时指定接口的IP地址
就像是
setsockopt (sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
mreq结构的位置
struct ip_mreq
{
struct in_addr imr_multiaddr; /* IP multicast address of group */
struct in_addr imr_interface; /* local IP address of interface */
};
更多信息here.
内容总结
以上是互联网集市为您收集整理的从Linux上的特定网络接口接收多播全部内容,希望文章能够帮你解决从Linux上的特定网络接口接收多播所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。