从 Linux 上的特定网络接口接收多播
我正在尝试从 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);
但我正在从所有接口接收数据包。
怎么了?
I'm trying to receive a multicast data from specific network interface on 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);
But I'm receiving packets from all interfaces.
What wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,检查您的任何调用是否失败,在本例中为 socket、bind、setsockopt。使用 perror() 函数打印错误消息将帮助您诊断问题。
但是,为了接收多播数据报,您可能需要在使用 IP_ADD_MEMBERSHIP 套接字选项加入多播组时指定接口的 IP 地址
类似
mreq
结构的位置更多信息此处 。
First, check if any of your calls fail, socket,bind,setsockopt in this case. Printing an error message with the perror() function will help you diagnose problems.
However, for receiving multicast datagrams you might need to specify the ip address of the interface when you join a multicast group using the IP_ADD_MEMBERSHIP socket option
Something like
where the
mreq
struct isMore info here.