Có thể nhận dữ liệu từ nhiều nhóm phát đa hướng trên một socket không?Đăng ký nhiều nhóm đa hướng trên một ổ cắm (Linux, C)
Ví dụ:
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);
}
}
Mã này hoạt động khi tôi thêm một nhóm multicast. Nhưng khi tôi cố gắng thêm cái khác, "ràng buộc" không thành công. Tôi không hoàn toàn hiểu tại sao ràng buộc cần phải có ở nơi đầu tiên? (nhưng mã không hoạt động nếu không có nó).
Lý tưởng nhất là tôi muốn gọi AddGroup nhiều lần trên cùng một ổ cắm. Điều này có thể không? Hay tôi cần một ổ cắm cho mỗi nhóm và sau đó chỉ cần sử dụng bỏ phiếu?
Bạn đang không chính xác. Bạn có thể tham gia bao nhiêu nhóm tùy thích. Tham gia các nhóm phát đa hướng không liên quan gì đến bộ nhận dạng. – EJP