Swi*_*tch 7 c linux networking multicast
是否可以在单个套接字上接收来自多个组播组的数据?
例如:
void AddGroup(int sock,
const char* mc_addr_str,
int mc_port,
const char* interface) {
struct sockaddr_in mc_addr;
memset(&mc_addr, 0, sizeof(mc_addr));
mc_addr.sin_family = AF_INET;
mc_addr.sin_addr.s_addr = inet_addr(mc_addr_str);
mc_addr.sin_port = htons(mc_port);
if ((bind(sock, (struct sockaddr *) &mc_addr,
sizeof(mc_addr))) < 0) {
perror("bind() failed");
exit(1);
}
// construct an IGMP join request structure
struct ip_mreq mc_req;
mc_req.imr_multiaddr.s_addr = inet_addr(mc_addr_str);
mc_req.imr_interface.s_addr = inet_addr(interface);
if ((setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(void*) &mc_req, sizeof(mc_req))) < 0) {
perror("setsockopt() failed");
exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
添加一个组播组时,此代码有效.但是当我尝试添加另一个时,"绑定"失败了.我不太明白为什么绑定首先需要在那里?(但没有它,代码不起作用).
理想情况下,我想在同一个套接字上多次调用AddGroup.这可能吗?或者我每组需要一个插槽然后只使用轮询?
| 归档时间: |
|
| 查看次数: |
9895 次 |
| 最近记录: |